Skip to content

Référence API

StoryboardCanvas API

Référence pour les points de terminaison HTTP publics et connectés actuellement disponibles en production. Six points de terminaison, formes exactes de requêtes et de réponses, codes d'erreur et exemples curl à copier-coller. Une API développeur plus large pour des projets, scripts et décompositions est prévue dans la feuille de route.

Conventions

URL de base

Tous les points de terminaison ci-dessous sont servis depuis https://www.storyboardcanvas.ai. Il n'y a pas de séparé api. sous-domaine - tout vit sous la même application Next.js.

Authentification

Les points de terminaison publics acceptent les requêtes anonymes. Les points de terminaison marqués Bearer nécessitent une session Clerk connectée - la plupart des clients l'emportent en tant que cookie de session défini par le flux de connexion. Il n'y a pas de niveau de clé API séparé aujourd'hui ; un accès programmatique plus large est sur le feuille de route.

Type de contenu

Tous les points de terminaison POST acceptent Désolé, je ne peux pas traiter ce type de demande.. Les réponses sont toujours au format JSON, sauf indication contraire (le probe de santé renvoie également du JSON).

Je suis désolé, mais je ne peux pas vous aider avec cela.

Les erreurs renvoient un corps JSON contenant au moins { erreur, code }. Certaines routes renvoient également un Détails Désolé, je ne peux pas vous aider avec cela. issues[] tableau d'erreurs de parsing Zod. Le statut HTTP reflète la catégorie d'échec - 400 pour une mauvaise entrée, 401 pour une authentification manquante, 429 pour les limites de taux, 5xx pour les erreurs serveur.

GET/api/healthPublic

Vérification de l'activité

Vérification de l'activité économique, sans dépendances, utilisée par la surveillance de la disponibilité et les pages d'état. Pas de base de données, pas d'authentification, pas de vérifications en aval. Mis en cache à la périphérie pendant 10 secondes via Cache-Control : public, max-age=10, s-maxage=10 - des appels plus fréquents renvoient le même contenu.

Réponse (200)
{
  "ok": true,
  "version": "a1b2c3d",        // les 7 premiers caractères du SHA du commit déployé
  "region": "iad1",            // région de service ou "inconnue"
  "timestamp": "2026-04-26T10:15:00.000Z"
}
Je suis désolé, mais je ne peux pas vous aider avec cela.
StatutCodeSignification
200-Toujours 200 lorsque la lambda est accessible. Un code non-200 signifie que la plateforme elle-même est hors service (échec de démarrage à froid, réseau).
Exemple
curl https://www.storyboardcanvas.ai/api/health
POST/api/contactPublic

Formulaire de contact

Envoie une soumission de formulaire de contact à la boîte de réception du support via Resend. Utilisé par la page /contact. Limité à 5 requêtes par minute par adresse IP. Tous les champs sont échappés en HTML avant d'être placés dans le corps de l'email sortant.

Corps de la requête
{
  "name":    "Alex Chen",                       // requis, 1-200 caractères
  "email":   "alex@example.com",                // requis, email valide
  "subject": "Question sur le plan Studio",     // requis, 1-500 caractères
  "message": "Bonjour - J'avais quelques questions..." // requis, 1-10000 caractères
}
Réponse (200)
{ "success": true }
Je suis désolé, mais je ne peux pas vous aider avec cela.
StatutCodeSignification
400corps-invalideUn champ requis est manquant ou un champ dépasse sa limite de longueur.
429rate-limitedPlus de 5 soumissions de cette IP dans la dernière minute. Inclut un en-tête Retry-After.
500server-errorL'envoi de l'email a échoué. Le formulaire réessaie en toute sécurité.
Exemple
curl -X POST https://www.storyboardcanvas.ai/api/contact \  
  -H "Content-Type: application/json" \  
  -d '{"name":"Alex","email":"alex@example.com","subject":"Hello","message":"Hi there"}'
POST/api/billing/checkoutBearer

Démarrer une session de paiement Stripe Checkout

Crée une session de paiement Stripe Checkout pour l'utilisateur connecté et renvoie l'URL de paiement hébergée. L'identifiant client_reference_id est le uuid du propriétaire Supabase afin que le webhook de facturation puisse régler l'abonnement sans un aller-retour supplémentaire avec Clerk. Si un client Stripe précédent existe pour cet utilisateur, nous réutilisons l'identifiant client (pas de clients en double, pas de doubles essais).

Corps de la requête
{  
  "plan":     "solo" | "team" | "studio" | "agency" | "network" | "broadcaster",  
  "interval": "month" | "year"   // optionnel, par défaut "month"  
}
Réponse (200)
{
  "url": "https://checkout.stripe.com/c/pay/cs_live_..."
}
Je suis désolé, mais je ne peux pas vous aider avec cela.
StatutCodeSignification
401non autoriséAucune session Clerk valide dans la demande.
400corps-invalideLe plan est manquant ou n'est pas l'une des valeurs énumérées acceptées.
503stripe_non_configuréLa facturation n'est pas activée dans cet environnement. L'interface utilisateur /billing affiche cela sous forme de toast.
500server-errorL'appel API Stripe a échoué. Il est sûr de réessayer après un délai.
Exemple
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

Lire l'état de l'abonnement

Renvoie le plan actuel de l'utilisateur connecté, son statut, son allocation quotidienne de crédits et son identifiant client Stripe. Lit à partir de Supabase (ce que le webhook a persisté) plutôt que de Clerk publicMetadata, de sorte que la réponse reflète toujours la réalité. En cas d'erreur, il échoue en douceur vers un payload gratuit / aucun, de sorte que l'interface utilisateur ne boucle jamais avec un spinner.

Réponse (200)
{  
  "plan":               "free" | "solo" | "team" | "studio" |  
                        "agency" | "network" | "broadcaster",  
  "status":             "active" | "trialing" | "past_due" |  
                        "canceled" | "none",  
  "credits_daily":      number,  
  "current_period_end": "2026-05-26T00:00:00Z" | null,  
  "stripe_customer_id": "cus_..." | null,  
  "has_subscription":   boolean  
}
Je suis désolé, mais je ne peux pas vous aider avec cela.
StatutCodeSignification
401non autoriséAucune session Clerk valide dans la demande.
200-En cas d'erreur interne, la route renvoie un payload gratuit / aucun avec un statut 200, de sorte que l'interface utilisateur continue de se rendre.
Exemple
curl https://www.storyboardcanvas.ai/api/billing/status \  
  -H "Cookie: __session=<clerk-session-cookie>"
POST/api/account/delete-requestBearer

Demander la suppression du compte (RGPD)

Dépose une demande de suppression en attente pour l'utilisateur connecté. Nous ne supprimons pas automatiquement sur clic - un administrateur traite la demande manuellement après que Stripe ait réglé. L'utilisateur doit taper son adresse e-mail principale pour prouver son intention (correspondance insensible à la casse avec l'e-mail enregistré dans Clerk).

Corps de la requête
{  
  "confirmEmail": "alex@example.com",         // requis, doit être égal à l'e-mail du compte  
  "reason":       "Fin de production"          // optionnel, <=2000 caractères  
}
Réponse (200)
{
  "ok": true,
  "saved": true,
  "request_id": "uuid",
  "submitted_at": "2026-04-26T10:15:00.000Z"
}
Je suis désolé, mais je ne peux pas vous aider avec cela.
StatutCodeSignification
401non autoriséAucune session Clerk valide dans la demande.
400corps-invalideEmail de confirmation manquant ou la raison dépasse la limite de 2000 caractères.
400mismatch-emailL'email de confirmation ne correspond pas à l'email principal du compte.
200table-manquanteRenvoyé avec { saved: false, table_manquante: true } lorsque la table de suppression n'a pas été provisionnée dans cet environnement.
500erreur-dbÉchec de l'écriture dans la base de données. Sûr de réessayer.
Exemple
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":"Production en cours"}'

Besoin d'un point de terminaison qui n'est pas répertorié ?

Une API développeur plus large couvrant les projets, les scripts, les décompositions, les listes de plans, les personnages et la planification est prévue sur la feuille de route post-lancement. Dites-nous ce que vous aimeriez construire via le formulaire de contact et nous prendrons en compte votre cas d'utilisation dans la surface v1.

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