Manage your pressd.in content programmatically. Authenticate with an API key from Settings → API Keys.
All authenticated endpoints accept a Bearer token in the Authorization header.
Authorization: Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
API keys carry permissions: read, write, and publish. A write-only key cannot publish content, and a read-only key cannot create or modify content.
Per API key, per minute:
| Operation | Limit |
|---|---|
| Read (GET) | 1,000 / min |
| Write (POST, PUT, DELETE) | 100 / min |
Rate limit info is returned in X-RateLimit-Remaining and X-RateLimit-Reset headers.
No authentication required. Returns published content only.
/api/profiles/{slug}Get a profile by slug.
/api/profiles/{slug}/decksList published decks with nested cards.
/api/profiles/{slug}/decks/{deckSlug}Get a single deck with cards.
/api/profiles/{slug}/scrollsList published scrolls (no body).
/api/profiles/{slug}/scrolls/{scrollSlug}Get a single scroll with body.
Requires write permission.
/api/decksCreate a new deck.
{ "title": "My Deck", "slug": "my-deck", "description": "Optional" }/api/decks/{id}Update a deck. Send only fields to change.
{ "title": "New Title", "status": "published" }/api/decks/{id}Delete a deck and all its cards.
Requires write permission.
/api/decks/{id}/cardsAdd a card to a deck.
{ "card_type": "hero", "content": { "name": "Rick", "headline": "Builder" }, "sort_order": 0 }/api/cards/{id}Update a card.
{ "content": { "name": "Updated" } }/api/cards/{id}Delete a card.
/api/decks/{id}/cards/bulkCreate multiple cards at once (max 50).
{ "cards": [{ "card_type": "hero", "content": {...} }, ...] }/api/decks/{id}/cards/reorderReorder cards by ID.
{ "card_ids": ["uuid-1", "uuid-2", "uuid-3"] }hero { name, headline, subheadline, avatar_url, cta_text, cta_url }service { title, description, price, bullet_points: [], cta_text, cta_url }testimonial { quote, author, role, company, avatar_url }proof { items: [{ label, value }] }cta { heading, text, button_label, button_url, style }quote { text, attribution }event { title, date, venue, description, cta_text, cta_url }freeform { html }Requires write permission. Publishing requires publish permission.
/api/scrollsCreate a new scroll.
{ "title": "My Post", "slug": "my-post", "body": "# Hello\n\nMarkdown content..." }/api/scrolls/{id}Update a scroll.
{ "body": "Updated content", "status": "published" }/api/scrolls/{id}Delete a scroll.
| Status | Meaning |
|---|---|
400 | Bad request — missing required fields |
401 | Unauthorized — missing or invalid API key |
403 | Forbidden — insufficient permissions |
404 | Not found — resource doesn't exist or isn't yours |
429 | Rate limited — wait and retry |
500 | Server error |
All errors return { "error": "message" }.