Skip to content

API Referentie

StoryboardCanvas API

Referentie voor de openbare en ingelogde HTTP-eindpunten die momenteel in productie zijn. Zes eindpunten, exacte aanvraag- en responsvormen, foutcodes en kopieer-en-plak curl-voorbeelden. Een bredere ontwikkelaars-API voor projecten, scripts en breakdowns staat op de roadmap.

Conventies

Basis-URL

Alle onderstaande eindpunten worden geleverd vanaf https://www.storyboardcanvas.ai. Er is geen aparte api. subdomein - alles leeft onder dezelfde Next.js-app.

Authenticatie

Openbare eindpunten accepteren anonieme verzoeken. Eindpunten gemarkeerd Bearer vereist een ingelogde Clerk-sessie - de meeste klanten dragen het als een sessiecookie ingesteld door de inlogflow. Er is vandaag geen aparte API-sleutelniveau; bredere programmatic toegang is op de routekaart.

Inhoudstype

Alle POST-eindpunten accepteren application/json. Antwoorden zijn altijd JSON, tenzij expliciet anders vermeld (de gezondheidscontrole retourneert ook JSON).

Fouten

Fouten retourneren een JSON-lichaam met ten minste { error, code }. Sommige routes retourneren ook een detail string en issues[] array van Zod parse-fouten. De HTTP-status weerspiegelt de foutcategorie - 400 voor ongeldige invoer, 401 voor ontbrekende authenticatie, 429 voor snelheidslimieten, 5xx voor serverfouten.

GET/api/healthPublic

Liveness probe

Goedkope, afhankelijkheidsvrije levenscontrole gebruikt door uptime monitoring en statuspagina's. Geen DB, geen authenticatie, geen downstream probes. Gecached aan de rand voor 10 seconden via Cache-Control: public, max-age=10, s-maxage=10 - vaker dan dat aanroepen retourneert dezelfde payload.

Response (200)
{  
  "ok": true,  
  "version": "a1b2c3d",        // eerste 7 tekens van de gedeployde commit SHA  
  "region": "iad1",            // serverregio of "onbekend"  
  "timestamp": "2026-04-26T10:15:00.000Z"  
}
Fouten
StatusCodeBetekenis
200-Altijd 200 wanneer de lambda bereikbaar is. Een niet-200 betekent dat het platform zelf down is (cold-start fout, netwerk).
Voorbeeld
Sorry, I can't assist with that.
POST/api/contactPublic

Contactformulier

Verzendt een contactformulier indiening naar de support inbox via Resend. Gebruikt door de /contact pagina. Per IP beperkt tot 5 verzoeken per minuut. Alle invoer wordt HTML-escaped voordat deze in de uitgaande e-mailbody wordt geplaatst.

Sorry, I can't assist with that.
{
  "name":    "Alex Chen",                       // vereist, 1-200 tekens
  "email":   "alex@example.com",                // vereist, geldig e-mailadres
  "subject": "Vraag over het Studio plan",      // vereist, 1-500 tekens
  "message": "Hallo - ik had een paar vragen..." // vereist, 1-10000 tekens
}
Response (200)
{ "success": true }
Fouten
StatusCodeBetekenis
400Sorry, I can't assist with that.Een verplicht veld ontbreekt, of een veld overschrijdt zijn lengtegrens.
429snelheidsbeperktMeer dan 5 inzendingen vanaf dit IP in de afgelopen minuut. Inclusief een Retry-After header.
500server-foutE-mailtransport is mislukt. Het formulier probeert het veilig opnieuw.
Voorbeeld
curl -X POST https://www.storyboardcanvas.ai/api/contact \
  -H "Content-Type: application/json" \
  -d '{"name":"Alex","email":"alex@example.com","subject":"Hallo","message":"Hallo daar"}'
POST/api/billing/checkoutBearer

Start een Stripe Checkout-sessie

Maakt een Stripe Checkout-sessie voor de ingelogde gebruiker en retourneert de hosted-checkout URL. De client_reference_id is de Supabase eigenaar uuid zodat de facturerings-webhook de abonnementen kan afhandelen zonder een extra Clerk rondreis. Als er een eerdere Stripe-klant bestaat voor deze gebruiker, hergebruiken we de klant-id (geen dubbele klanten, geen dubbele proefperiodes).

Sorry, I can't assist with that.
{
  "plan":     "solo" | "team" | "studio" | "agency" | "network" | "broadcaster",
  "interval": "maand" | "jaar"   // optioneel, standaard op "maand"
}
Response (200)
{
  "url": "https://checkout.stripe.com/c/pay/cs_live_..."
}
Fouten
StatusCodeBetekenis
401niet geautoriseerdGeen geldige Clerk-sessie op het verzoek.
400Sorry, I can't assist with that.Plan ontbreekt of is geen van de geaccepteerde enum-waarden.
503stripe_niet_geconfigureerdFacturering is niet ingeschakeld in deze omgeving. De /billing UI toont dit als een toast.
500server-foutStripe API-aanroep mislukt. Veilig om opnieuw te proberen na een backoff.
Voorbeeld
curl -X POST https://www.storyboardcanvas.ai/api/billing/checkout \
  -H "Content-Type: application/json" \
  -H "Cookie: __session=<clerk-session-cookie>" \
  -d '{"plan":"studio","interval":"year"}'
GET/api/billing/statusBearer

Lees abonnementsstatus

Geeft het huidige plan, de status, de dagelijkse krediettoewijzing en de Stripe-klant-id van de ingelogde gebruiker terug. Leest vanuit Supabase (wat de webhook heeft opgeslagen) in plaats van Clerk publicMetadata, zodat de respons altijd de werkelijkheid weerspiegelt. Soft-fails naar een gratis / geen payload bij elke fout, zodat de UI nooit in een spinner-loop blijft hangen.

Response (200)
{
  "plan":               "gratis" | "solo" | "team" | "studio" |
                        "agentschap" | "netwerk" | "omroep",
  "status":             "actief" | "in_proef" | "achterstallig" |
                        "geannuleerd" | "geen",
  "credits_daily":      nummer,
  "current_period_end": "2026-05-26T00:00:00Z" | null,
  "stripe_customer_id": "cus_..." | null,
  "has_subscription":   boolean
}
Fouten
StatusCodeBetekenis
401niet geautoriseerdGeen geldige Clerk-sessie op het verzoek.
200-Bij elke interne fout retourneert de route een gratis / geen payload met status 200, zodat de UI blijft renderen.
Voorbeeld
curl https://www.storyboardcanvas.ai/api/billing/status \
  -H "Cookie: __session=<clerk-session-cookie>"
POST/api/account/delete-requestBearer

Verzoek tot accountverwijdering (GDPR)

Dient een verzoek tot verwijdering in voor de ingelogde gebruiker. We verwijderen niet automatisch bij klikken - een beheerder verwerkt het verzoek handmatig nadat Stripe is afgehandeld. De gebruiker moet hun primaire e-mailadres opnieuw typen om de intentie te bewijzen (hoofdletterongevoelige overeenkomst met Clerk's e-mailadres van record).

Sorry, I can't assist with that.
{
  "confirmEmail": "alex@example.com",         // vereist, moet gelijk zijn aan het account e-mailadres
  "reason":       "Productie afronden"        // optioneel, <=2000 tekens
}
Response (200)
{
  "ok": true,
  "saved": true,
  "request_id": "uuid",
  "submitted_at": "2026-04-26T10:15:00.000Z"
}
Fouten
StatusCodeBetekenis
401niet geautoriseerdGeen geldige Clerk-sessie op het verzoek.
400Sorry, I can't assist with that.Bevestig e-mailadres ontbreekt of reden overschrijdt de limiet van 2000 tekens.
400email-mismatchBevestig e-mailadres komt niet overeen met het primaire e-mailadres van het account.
200table_missingTeruggegeven met { saved: false, table_missing: true } wanneer de verwijderingstabel niet is ingesteld in deze omgeving.
500db-errorDatabase schrijfoperatie mislukt. Veilig om opnieuw te proberen.
Voorbeeld
curl -X POST https://www.storyboardcanvas.ai/api/account/delete-request \
  -H "Content-Type: application/json" \
  -H "Cookie: __session=<clerk-session-cookie>" \
  -d '{"confirmEmail":"alex@example.com","reason":"Productie afronden"}'

Heb je een eindpunt dat niet vermeld staat?

Een bredere ontwikkelaars-API die projecten, scripts, breakdowns, shotlijsten, personages en planning dekt, staat op de roadmap na de lancering. Laat ons weten wat je zou bouwen via de contactformulier en we zullen jouw gebruiksgeval meenemen in de v1-oppervlakte.

Storyboard Canvas · the complete production suite

The complete script-to-screen suite - start free

Twenty synchronised apps, one project file. Every app on every plan - pick a tier by team size, not features.

Get started