Based on Us Connector API
A small, public API for starting a Based on Us comic on someone’s behalf — for AI assistants and other agentic platforms.
Overview
Based on Us turns a person’s photos and story into a personalized comic book, delivered as a private share link and a printable high-res PDF. The Connector API lets an AI assistant start a comic on someone’s behalf: it reads the catalog, creates a draft from what the person described, and returns a link where the person adds photos, sees a free preview with their real faces, and pays.
- Base URL:
https://api.basedonus.com/connector/v1 - OpenAPI spec: https://api.basedonus.com/connector/v1/openapi.json
- No API key required.
- JSON over HTTPS.
How the handoff works
- Call
GET /catalogto read the current occasions, styles, tones and length tiers. - Call
POST /comicswith the story and choices the person gave you. - Give the person the returned
continue_url. - They open it on basedonus.com, add photos (up to 4 characters, up to 3 photos each), see the free preview, and buy.
- Optionally poll
GET /comics/{comic_id}for the stage.
This is a handoff, not an end-to-end integration, for three reasons. Photos go directly from the person’s browser to Based on Us and never pass through the assistant. The API cannot trigger image generation or take payment — those stay gated behind the person’s own browser session once they open continue_url. And that URL carries a token that stays valid until the person starts adding photos — at that point the draft locks to whichever browser (or account) they used — so treat it as private to the person it was made for the whole time: don’t log it, cache it, or show it to anyone else.
Before the person opens continue_url, the draft’s content isn’t readable through any public endpoint — polling GET /comics/{comic_id} only ever returns the stage and price, never story text, photos, or anything else private. Once they open it, the draft follows the same rules as any comic started directly on basedonus.com: readable and editable only from the browser (or account) it’s bound to. Treat comic_id as private to the conversation it came from either way.
Endpoints
GET /catalog
Occasions, the visible art styles, tones, and length tiers with prices and limits. No request body or parameters. Validate every id from a draft against this before calling POST /comics — an unknown or hidden style is rejected.
curl https://api.basedonus.com/connector/v1/catalog{
"occasions": [
{
"id": "birthday",
"label": "Birthday",
"description": "Make their day legendary"
},
{
"id": "couple",
"label": "Couple / Anniversary",
"description": "Your love story, illustrated"
}
],
"styles": [
{
"id": "superhero-comic",
"label": "Superhero Comic"
},
{
"id": "cute-storybook",
"label": "Cute Storybook"
}
],
"tones": [
{
"id": "sweet",
"label": "Sweet"
},
{
"id": "funny",
"label": "Funny"
}
],
"lengths": [
{
"id": "12",
"label": "Short",
"panels": 12,
"price_cents": 1499,
"currency": "usd",
"recommended": false
},
{
"id": "18",
"label": "Standard",
"panels": 18,
"price_cents": 1999,
"currency": "usd",
"recommended": true
},
{
"id": "24",
"label": "Premium",
"panels": 24,
"price_cents": 2999,
"currency": "usd",
"recommended": false
}
],
"limits": {
"max_characters": 4,
"max_photos_per_character": 3
}
}POST /comics
Creates a draft comic from the person’s story and choices.
| Field | Type | Required | Notes |
|---|---|---|---|
| occasion | string | Yes | A catalog occasion id. |
| style | string | Yes | A catalog style id. |
| tone | string | No | A catalog tone id. |
| length | "12" | "18" | "24" | No | Default "18". |
| story.about | string | Yes | Up to 2000 characters. |
| story.inside_jokes | string | No | Up to 1000 characters. |
| story.important_memory | string | No | Up to 1000 characters. |
| story.things_to_include | string | No | Up to 1000 characters. |
| story.things_to_avoid | string | No | Up to 1000 characters. |
| story.ending_preference | string | No | Up to 500 characters. |
| characters | array | No | Up to 4 entries. |
| characters[].name | string | Yes | 1–80 characters. |
| characters[].role | string | No | Up to 80 characters, e.g. "girlfriend", "our dog". |
| characters[].traits | string | No | Up to 500 characters. |
| characters[].visual_notes | string | No | Up to 500 characters. |
| gift_to | string | No | Up to 80 characters. |
| gift_from | string | No | Up to 80 characters. |
| gift_message | string | No | Up to 500 characters. |
| source | string | No | Identifies the calling platform, e.g. "muse". Default "connector". |
curl -X POST https://api.basedonus.com/connector/v1/comics \
-H "Content-Type: application/json" \
-d '{
"occasion": "couple",
"style": "superhero-comic",
"tone": "romantic",
"length": "18",
"story": {
"about": "We met at a coffee shop in Brooklyn five years ago and have been inseparable since.",
"inside_jokes": "She still calls him \"Toast Boy\" after he set off the fire alarm making breakfast.",
"important_memory": "The rainy hike where he proposed under a broken umbrella.",
"things_to_include": "Their golden retriever, Biscuit.",
"things_to_avoid": "Nothing about her ex.",
"ending_preference": "A wedding-day flash-forward."
},
"characters": [
{
"name": "Maya",
"role": "bride",
"traits": "sarcastic, loyal",
"visual_notes": "curly red hair, glasses"
},
{
"name": "Diego",
"role": "groom",
"traits": "clumsy, devoted",
"visual_notes": "tall, beard"
}
],
"gift_to": "Maya & Diego",
"gift_from": "Their college roommates",
"gift_message": "Five years down, forever to go.",
"source": "muse"
}'Response:
| Field | Type | Required | Notes |
|---|---|---|---|
| comic_id | string | No | |
| stage | string | No | See Stage values below. |
| continue_url | string | No | See How the handoff works. |
| next_steps | array of strings | No | Short human-readable instructions. |
| length | string | No | |
| price_cents | integer | No | |
| currency | string | No | e.g. "usd". |
{
"comic_id": "b7e2b6b0-2f3e-4f2a-9c34-2a6e0b1e9f21",
"stage": "draft",
"continue_url": "https://basedonus.com/create?resume=b7e2b6b0-2f3e-4f2a-9c34-2a6e0b1e9f21&claim=8kQnZ2f...",
"next_steps": [
"Open the link to add a few clear photos of each character.",
"See a free preview panel drawn from those photos before paying anything.",
"Pay once to unlock the full comic, a printable PDF, and a private link to share."
],
"length": "18",
"price_cents": 1999,
"currency": "usd"
}GET /comics/{comic_id}
The draft’s current stage, length tier and price, and its continue_url. This never returns story text, photos, or the finished comic — poll it to know when a draft has moved on, not to read what’s in it.
curl https://api.basedonus.com/connector/v1/comics/b7e2b6b0-2f3e-4f2a-9c34-2a6e0b1e9f21| Field | Type | Required | Notes |
|---|---|---|---|
| comic_id | string | No | |
| stage | string | No | See Stage values below. |
| length | string | null | No | Null if the draft hasn't chosen a length tier yet. |
| price_cents | integer | No | |
| currency | string | No | e.g. "usd". |
| continue_url | string | No | Carries no claim token, unlike POST /comics's. |
{
"comic_id": "b7e2b6b0-2f3e-4f2a-9c34-2a6e0b1e9f21",
"stage": "preview_ready",
"length": "18",
"price_cents": 1999,
"currency": "usd",
"continue_url": "https://basedonus.com/create?resume=b7e2b6b0-2f3e-4f2a-9c34-2a6e0b1e9f21"
}Stage values
| Field | Type | Required | Notes |
|---|---|---|---|
| draft | No | Created by POST /comics. Occasion, style, story and cast are saved; no photos yet. | |
| preview_ready | No | The person added photos, and a free preview drawn from their real faces is ready to view. | |
| generating | No | Payment completed on basedonus.com; the full comic is being drawn. | |
| ready | No | The finished comic and printable PDF are ready. | |
| failed | No | Generation failed; contact support@basedonus.com. |
Catalog facts
Pulled straight from the same catalog the wizard itself uses.
Occasions
| id | label |
|---|---|
| birthday | Birthday |
| couple | Couple / Anniversary |
| family | Family |
| friends | Friends |
| pet | Pet |
| superhero | Superhero Adventure |
| roast | Funny Roast |
| custom | Custom |
Styles
| id | label |
|---|---|
| superhero-comic | Superhero Comic |
| cute-storybook | Cute Storybook |
| funny-cartoon | Funny Cartoon |
| manga-adventure | Manga Adventure |
| chibi-kawaii | Chibi Kawaii |
| pixel-quest | Pixel Quest |
| fantasy-adventure | Fantasy Adventure |
| watercolor | Watercolor |
| pop-art-romance | Pop Art Romance |
| sci-fi-comic | Sci-Fi Comic |
| art-nouveau-gold | Art Nouveau Gold |
| ligne-claire | Euro Adventure |
| streaming-sitcom | Streaming Sitcom |
| impressionist | Impressionist |
| classic-sunday | Classic Sunday Comic |
Tones
| id | label |
|---|---|
| sweet | Sweet |
| funny | Funny |
| epic | Epic |
| romantic | Romantic |
| chaotic | Chaotic |
| emotional | Emotional |
| kid-friendly | Kid-friendly |
Pricing & limits
| Field | Type | Required | Notes |
|---|---|---|---|
| 12 | 12 panels | No | $14.99, one-time. |
| 18 | 18 panels | No | $19.99, one-time. |
| 24 | 24 panels | No | $29.99, one-time. |
- One-time price per comic, no subscription. Checkout happens on basedonus.com, by Creem (merchant of record).
- Buyers must be 18+.
- Purchasing requires sign-in; starting and previewing a comic does not.
- Digital only — nothing physical ships.
- Rate limits, per IP: 120 requests/minute for the read routes (
GET /catalog,GET /comics/{comic_id}), 30/minute forPOST /comics. Exceeding either returns HTTP 429. POST /comicsis NOT idempotent — a retried call creates a second draft. Only retry it on a connection error or a 5xx, never on an ambiguous timeout.- Errors are JSON
{ "detail": ... }— 422 for validation failures, 404 for an unknown comic id, 503 if the connector is temporarily unavailable.
Privacy
Uploaded photos auto-delete and are never sold or used to train models. See Privacy Policy, Terms of Service and Acceptable Use Policy.
