v1 · Create storybooks programmatically from your CRM, a spreadsheet, or any tool.
Generate an API key in your dashboard under Account → API Access. Send it on every request as a bearer token:
Authorization: Bearer asb_live_xxxxxxxxxxxx
Keep keys secret — anyone with a key can create storybooks on your account. Rate limit: 60 requests/minute.
POST https://agentstorybook.ai/api/v1/storybooks
Leave the cover to us. Provide a clientPhotoUrl to illustrate your clients, a housePhotoUrl for the home (sellers fall back to Street View), or nothing at all for a clean no-likeness cover. Supply a finished coverImageUrl to skip generation entirely. Cover generation can take 30–60 seconds.
| Field | Required | Notes |
|---|---|---|
type | yes | "seller" or "buyer" |
address | yes | Full street address. Used for the auto cover. |
clients | no | Full display name, used as-is. e.g. "John & Sarah Smith" |
client1, client2 | no | Two owner names from your CRM. We format smartly: shared surname → "John & Sarah Smith"; different → "John Smith & Sarah Jones". Ignored if clients is set. |
agent | no | Agent name shown on the storybook |
brand | no | Brokerage / brand name. Printed on the SOLD sign only when you have not uploaded a yard-sign photo in Account. |
dates | no | Object. Seller: listing, list, prePhoto, photo, contract, closing. Buyer: consultation, seeHomes, contract, closing. ISO dates (2026-07-01). |
clientPhotoUrl | no | Public image URL of the client(s). We illustrate their likeness on the cover. Omit for a no-likeness cover. |
housePhotoUrl | no | Public image URL of the home. Sellers fall back to Street View if omitted. |
coverImageUrl | no | Supply your own cover image instead of auto-generating. |
waitForCover | no | Default true (waits ~30–60s and returns when the cover is ready). Set false to return immediately with coverStatus:"generating" — recommended for Zapier and other timeout-sensitive callers. |
idempotencyKey | no | Reuse the same value to avoid duplicates on retries. |
curl -X POST https://agentstorybook.ai/api/v1/storybooks \
-H "Authorization: Bearer asb_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"type": "seller",
"address": "123 Main St, Dallas, TX 75201",
"clients": "John & Sarah Smith",
"agent": "Thomas Eaves",
"dates": { "listing": "2026-07-01", "closing": "2026-08-15" },
"idempotencyKey": "crm-deal-48213"
}'
{
"slug": "123-main-st",
"type": "seller",
"clientUrl": "https://agentstorybook.ai/stories/123-main-st?token=...",
"publicUrl": "https://agentstorybook.ai/stories/123-main-st",
"coverGenerated": true,
"coverStatus": "ready",
"status": "ready"
}
GET /api/v1/storybooks — list your storybooks.
GET /api/v1/storybooks?slug=123-main-st — fetch one.
DELETE /api/v1/storybooks?slug=123-main-st — delete one.
GET /api/v1/me — verify a key; returns your plan.
Errors return a JSON body: { "error": "code", "message": "..." }. Common codes: 401 unauthorized, 400 invalid, 402/403 limit_reached, 404 not_found, 429 rate_limited.
Questions? Reply to your AgentStorybook welcome email.