The AI creation ecosystem connecting Faces, AI Creators, and Brands.
Creator billing now supports plan-aware entitlements backed by Stripe and persisted on public.creators.
free: safe fallback when no paid creator subscription is activebasic($25/mo): likeness profile, KYC, agency connection, and up to 15 combinedcontent_types+industriespro($50/mo): everything in Basic plus Cameo uploads, unauthorized-use monitoring access, ElevenLabs voice profile creation for up to 6 tones, and advanced earnings analytics
public.creators.plan_tierpublic.creators.stripe_customer_idpublic.creators.stripe_subscription_idpublic.creators.plan_updated_at
Audit history is stored in public.creator_subscription_events.
Creator entitlements are enforced server-side before UI gating:
- voice profile creation is Pro-only and capped at 6 tones
- creator analytics responses expose
plan_tierandadvanced_analytics_enabled - Basic and Free creators are capped at 15 combined public categories
- Cameo uploads are blocked for non-Pro creators
POST /api/creator/billing/checkoutGET /api/creator/billing/status
STRIPE_CREATOR_BASIC_PRICE_IDSTRIPE_CREATOR_PRO_PRICE_IDSTRIPE_CREATOR_SUCCESS_URLSTRIPE_CREATOR_CANCEL_URLThe AI creation ecosystem connecting Faces, AI Creators, and Brands
Agency-to-creator connections started from the agency dashboard marketplace are now contract-backed.
- The agency clicks
Connectfrom the marketplace and must first provide locked contract terms such ascommission_rate,valid_from, andvalid_until. - Those critical values are stored in the database before the contract is rendered.
- The rendered contract is pushed into an embedded DocuSeal builder so the agency can place the required signature fields before the contract is sent.
- The contract body can be customized, but it must include the required placeholders:
{agency_name}{creator_name}{commission_rate}{valid_from}{valid_until}
- Connected marketplace creators use the active signed contract commission for payout splits.
- Agency commission overrides in settings remain applicable only to agency-owned/internal talents.
- A marketplace connection becomes active only after contract signature.
- The DocuSeal webhook endpoint for this flow is
POST /webhooks/docuseal/marketplace-contracts. - When DocuSeal posts a completed signing event, the marketplace contract row is updated immediately and the creator-agency connection is activated automatically.
- The creator dashboard, talent portal, and agency roster also perform best-effort contract sync on normal reads as a fallback if webhook delivery is delayed.
- Active marketplace contracts cannot be disconnected instantly by the creator.
- Early creator disconnects now create a pending request that the agency must approve.
- If the marketplace contract expires, the live agency-creator connection is removed automatically while the contract record is retained for history.
agency_creator_marketplace_contractsstores the legal contract lifecycle:draftpending_signatureactiveexpireddeclinedvoided
creator_agency_invitesstores invite/request state for the creator dashboard experience.agency_talent_relationshipsis the real connection table that determines whether a creator is connected to an agency.agency_usersremains the internal agency-managed talent profile table. Marketplace-connected creators may appear in agency views throughagency_talent_relationshipswithout requiring a mirroredagency_usersrow.
- Agency starts marketplace
Connect. - A draft contract row is created in
agency_creator_marketplace_contracts. - A pending invite row is ensured in
creator_agency_invites. - The agency uses the embedded DocuSeal builder to place signature fields and send the contract.
- After both parties sign, the marketplace DocuSeal webhook updates the contract row to
active. - Activation then updates:
creator_agency_invites.status -> acceptedagency_talent_relationships.status -> active
- Marketplace cards, Creator Dashboard, Talent Portal, and the Agency Roster should all treat the creator as connected once
agency_talent_relationshipsis active.
- Creator direct disconnect is blocked while a marketplace contract is still
active. - The creator may request disconnect early, which updates the contract row with:
disconnect_status = pendingdisconnect_requested_by = creatordisconnect_requested_atdisconnect_reason
- The agency reviews that request and can approve or reject it.
- Approval updates the contract row to
terminated, records review metadata, and removes the liveagency_talent_relationshipsrow. - Rejection keeps the contract active and records the review metadata on the contract.
- On natural expiry, the live relationship is automatically removed and the contract is moved out of the active connection set.