/workspaceCurrent workspace
Example
curl -X GET https://aftermatter.online/api/v1/workspace \ -H "Authorization: Bearer sk_live_…"
Every endpoint available to API keys, generated from the same definitions the server validates against.
https://aftermatter.online/api/v1
Send your key as a bearer token: Authorization: Bearer sk_live_…. Keys belong to one workspace and carry scopes; a request outside its scopes gets 403.
120 requests per minute per key. Over the limit you get 429 with a Retry-After header. Generations also respect your plan's concurrent job limit.
Errors are JSON: { "error": { "code", "message", "details" }, "requestId" }. 401 unauthenticated, 402 not enough credits, 403 missing scope or plan feature, 404 not found (also for other workspaces’ data), 409 conflict, 422 validation (details.issues), 429 rate limited.
Send an Idempotency-Key header (or idempotencyKey in the body) when creating generations. Retrying with the same key returns the original job instead of charging twice.
Generations reserve credits when they start and are charged only when they succeed; failed or cancelled jobs return the reservation. Estimate first with POST /generations/estimate.
/workspaceCurrent workspace
curl -X GET https://aftermatter.online/api/v1/workspace \ -H "Authorization: Bearer sk_live_…"
/uploadsStart an upload (returns signed URL(s))
Scopes: content.create
Request body
filenamestringrequiredmax 255 charsmimeTypestringrequiredmax 100 charssizeintegerrequired≤ 9007199254740991projectIdstring (uuid)titlestringmax 200 charstagsstring[]curl -X POST https://aftermatter.online/api/v1/uploads \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/uploads/{id}/completeFinish an upload and start processing
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
partsobject[]partNumberintegerrequired≥ 1 · ≤ 10000etagstringrequiredmax 200 charscurl -X POST https://aftermatter.online/api/v1/uploads/:id/complete \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/assetsList and search assets
Scopes: content.read
Parameters
kindquery · "image" | "video" | "audio" | "model3d" | "document" | "other"sourcequery · stringprojectIdquery · string (uuid)collectionIdquery · string (uuid)favoritequery · "true" | "false"qquery · stringtagquery · stringlimitquery · integerbeforequery · stringidsquery · stringcharacterIdquery · string (uuid)curl -X GET https://aftermatter.online/api/v1/assets \ -H "Authorization: Bearer sk_live_…"
/assets/{id}Get an asset
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/assets/:id \ -H "Authorization: Bearer sk_live_…"
/assets/{id}Rename, tag, favorite, move or change visibility
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
titlestringmax 200 charstagsstring[]favoritebooleanprojectIdstring (uuid)visibility"private" | "unlisted" | "public"curl -X PATCH https://aftermatter.online/api/v1/assets/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/assets/deleteDelete assets
Scopes: content.delete
Request body
idsstring (uuid)[]requiredcurl -X POST https://aftermatter.online/api/v1/assets/delete \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/assets/{id}/duplicateDuplicate an asset
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/assets/:id/duplicate \ -H "Authorization: Bearer sk_live_…"
/assets/{id}/downloadShort-lived download URL
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/assets/:id/download \ -H "Authorization: Bearer sk_live_…"
/assets/{id}/versionsOriginal and derived versions
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/assets/:id/versions \ -H "Authorization: Bearer sk_live_…"
/collectionsCollections
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/collections \ -H "Authorization: Bearer sk_live_…"
/collectionsCreate a collection
Scopes: content.create
Request body
namestringrequiredmax 80 charscurl -X POST https://aftermatter.online/api/v1/collections \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/collections/{id}Delete a collection (assets are kept)
Scopes: content.delete
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/collections/:id \ -H "Authorization: Bearer sk_live_…"
/collections/{id}/itemsAdd/remove assets in a collection
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
addstring (uuid)[]removestring (uuid)[]curl -X POST https://aftermatter.online/api/v1/collections/:id/items \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/projectsList projects
Scopes: content.read
Parameters
statusquery · "active" | "archived"qquery · stringcurl -X GET https://aftermatter.online/api/v1/projects \ -H "Authorization: Bearer sk_live_…"
/projectsCreate a project
Scopes: content.create
Request body
namestringrequiredmax 120 charsdescriptionstringmax 2000 charscurl -X POST https://aftermatter.online/api/v1/projects \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/projects/{id}Get a project
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/projects/:id \ -H "Authorization: Bearer sk_live_…"
/projects/{id}Rename, describe, set cover, archive/restore
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
namestringmax 120 charsdescriptionstringmax 2000 charscover_asset_idstring (uuid)status"active" | "archived"curl -X PATCH https://aftermatter.online/api/v1/projects/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/projects/{id}Delete a project
Scopes: content.delete
Parameters
idpath · stringrequireddeleteAssetsquery · "true" | "false"curl -X DELETE https://aftermatter.online/api/v1/projects/:id \ -H "Authorization: Bearer sk_live_…"
/projects/{id}/duplicateDuplicate a project
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/projects/:id/duplicate \ -H "Authorization: Bearer sk_live_…"
/projects/{id}/assetsAdd assets to a project
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
assetIdsstring (uuid)[]requiredcurl -X POST https://aftermatter.online/api/v1/projects/:id/assets \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/projects/{id}/assets/removeRemove assets from a project
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
assetIdsstring (uuid)[]requiredcurl -X POST https://aftermatter.online/api/v1/projects/:id/assets/remove \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/creditsCredit balance
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/credits \ -H "Authorization: Bearer sk_live_…"
/credits/ledgerCredit transactions
Scopes: billing.view
Parameters
limitquery · integerbeforequery · integerallquery · "true" | "false"curl -X GET https://aftermatter.online/api/v1/credits/ledger \ -H "Authorization: Bearer sk_live_…"
/voices/elevenlabsVoices of the connected ElevenLabs account (premade, cloned, designed)
Scopes: content.create
curl -X GET https://aftermatter.online/api/v1/voices/elevenlabs \ -H "Authorization: Bearer sk_live_…"
/generations/estimateValidate a request and get its credit cost (no charge)
Scopes: content.create
Request body
modelIdstringrequiredmax 80 charsmodestringmax 40 charstool"image" | "video" | "influencer" | "motion" | "lipsync" | "swap" | "ads" | "marketing" | "cinema" | "audio" | "effects" | "canvas" | "agent" | "editor" | "3d" | "api"default "image"promptstringmax 50000 charsnegativePromptstringmax 5000 charsparamsobjectdefault {}inputsobject[]default []slotstringrequiredmax 40 charsassetIdsstring (uuid)[]default []projectIdstring (uuid)titlestringmax 200 charsidempotencyKeystringmax 120 charscontextobjectdefault {}rightsConfirmedbooleancurl -X POST https://aftermatter.online/api/v1/generations/estimate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/generationsStart a generation (credits are reserved, charged only on success)
Scopes: content.create
Parameters
Idempotency-Keyheader · stringRequest body
modelIdstringrequiredmax 80 charsmodestringmax 40 charstool"image" | "video" | "influencer" | "motion" | "lipsync" | "swap" | "ads" | "marketing" | "cinema" | "audio" | "effects" | "canvas" | "agent" | "editor" | "3d" | "api"default "image"promptstringmax 50000 charsnegativePromptstringmax 5000 charsparamsobjectdefault {}inputsobject[]default []slotstringrequiredmax 40 charsassetIdsstring (uuid)[]default []projectIdstring (uuid)titlestringmax 200 charsidempotencyKeystringmax 120 charscontextobjectdefault {}rightsConfirmedbooleancurl -X POST https://aftermatter.online/api/v1/generations \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/generationsGeneration history and queue
Scopes: content.read
Parameters
statusquery · "active" | "completed" | "failed" | "all"toolquery · stringprojectIdquery · string (uuid)batchIdquery · string (uuid)limitquery · integerbeforequery · stringcurl -X GET https://aftermatter.online/api/v1/generations \ -H "Authorization: Bearer sk_live_…"
/generations/{id}Get a generation with its outputs
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/generations/:id \ -H "Authorization: Bearer sk_live_…"
/generations/{id}/cancelCancel a generation
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/generations/:id/cancel \ -H "Authorization: Bearer sk_live_…"
/generations/{id}/retryRun a failed generation again
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/generations/:id/retry \ -H "Authorization: Bearer sk_live_…"
/prompt/assistImprove, shorten, translate, vary or describe prompts
Scopes: content.create
Request body
action"improve" | "shorten" | "translate" | "variations" | "describe"requiredpromptstringmax 8000 charstoolstringmax 20 charsmodestringmax 40 charsmodelIdstringmax 80 charsassetIdstring (uuid)countinteger≥ 2 · ≤ 6curl -X POST https://aftermatter.online/api/v1/prompt/assist \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/presetsStarter and saved builder presets
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/characters/presets \ -H "Authorization: Bearer sk_live_…"
/characters/presetsSave builder selections as a preset
Scopes: content.create
Request body
namestringrequiredmax 60 charstype"natural" | "distinctive" | "extreme" | "stylized" | "fantasy"requiredattributesobjectrequiredcurl -X POST https://aftermatter.online/api/v1/characters/presets \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/presets/{id}Delete a preset
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/characters/presets/:id \ -H "Authorization: Bearer sk_live_…"
/characters/series/{id}A content series with its ideas and drafts
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/characters/series/:id \ -H "Authorization: Bearer sk_live_…"
/characters/series/{id}Delete a series (generated files stay in the library)
Scopes: content.delete
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/characters/series/:id \ -H "Authorization: Bearer sk_live_…"
/characters/series/{id}/ideasPlan more ideas for a series
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
countinteger≥ 1 · ≤ 12 · default 4curl -X POST https://aftermatter.online/api/v1/characters/series/:id/ideas \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/series-items/{id}Edit an idea
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
titlestringmax 200 charsformat"image" | "video"hookstringmax 500 charsscenestringmax 3000 charsscriptstringmax 3000 charscaptionstringmax 2200 charshashtagsstring[]curl -X PATCH https://aftermatter.online/api/v1/characters/series-items/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/series-items/{id}Delete an idea
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/characters/series-items/:id \ -H "Authorization: Bearer sk_live_…"
/characters/series-items/{id}/generateGenerate the draft for an idea
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
modelIdstringmax 80 charsprojectIdstring (uuid)curl -X POST https://aftermatter.online/api/v1/characters/series-items/:id/generate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/charactersSaved characters (AI influencers)
Scopes: content.read
Parameters
favoritequery · "true" | "false"qquery · stringcurl -X GET https://aftermatter.online/api/v1/characters \ -H "Authorization: Bearer sk_live_…"
/charactersCreate a character
Scopes: content.create
Request body
namestringrequiredmax 60 charstype"natural" | "distinctive" | "extreme" | "stylized" | "fantasy"default "natural"attributesobjectdefault {}customPromptstringmax 1500 chars · default ""negativePromptstringmax 1000 chars · default ""baseModelIdstringseedintegervoiceobjectmodelIdstringmax 80 charsvoicestringmax 120 charslanguagestringmax 20 charsdescriptionstringmax 500 charspersonalityobjecttraitsstring[]biostringmax 1000 charsnichestringmax 120 charsstylePublicbooleanpresetIdstringdescriptionstringmax 500 charscategory"fashion" | "lifestyle" | "beauty" | "comedy" | "editorial" | "technology" | "cinematic" | "fantasy" | "fitness" | "gaming" | "other"studioDraftbooleancurl -X POST https://aftermatter.online/api/v1/characters \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/{id}One character with references and projects
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/characters/:id \ -H "Authorization: Bearer sk_live_…"
/characters/{id}Update a character (the identity prompt is recompiled)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
namestringmax 60 charstype"natural" | "distinctive" | "extreme" | "stylized" | "fantasy"attributesobjectcustomPromptstringmax 1500 charsnegativePromptstringmax 1000 charsbaseModelIdstringseedintegervoiceobjectmodelIdstringmax 80 charsvoicestringmax 120 charslanguagestringmax 20 charsdescriptionstringmax 500 charspersonalityobjecttraitsstring[]biostringmax 1000 charsnichestringmax 120 charsstylePublicbooleanpresetIdstringdescriptionstringmax 500 charscategory"fashion" | "lifestyle" | "beauty" | "comedy" | "editorial" | "technology" | "cinematic" | "fantasy" | "fitness" | "gaming" | "other"favoritebooleancoverAssetIdstring (uuid)savebooleancurl -X PATCH https://aftermatter.online/api/v1/characters/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/{id}Delete a character (its files stay in the library)
Scopes: content.delete
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/characters/:id \ -H "Authorization: Bearer sk_live_…"
/characters/{id}/duplicateDuplicate a character
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/characters/:id/duplicate \ -H "Authorization: Bearer sk_live_…"
/characters/{id}/referencesAdd a reference image (uploads require a likeness rights confirmation)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
assetIdstring (uuid)requiredkind"portrait" | "full_body" | "angle" | "expression" | "sheet" | "upload"labelstringmax 60 charsprimarybooleanconfirmRightsbooleancurl -X POST https://aftermatter.online/api/v1/characters/:id/references \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/{id}/references/{assetId}Remove a reference
Scopes: content.create
Parameters
idpath · stringrequiredassetIdpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/characters/:id/references/:assetId \ -H "Authorization: Bearer sk_live_…"
/characters/{id}/looksGenerate candidate looks to choose the identity from
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
modelIdstringmax 80 charscountinteger≥ 1 · ≤ 4projectIdstring (uuid)curl -X POST https://aftermatter.online/api/v1/characters/:id/looks \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/{id}/reference-set/estimateCost of a reference set
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
kinds"portrait" | "full_body" | "angle" | "expression" | "sheet"[]requiredmodelIdstringmax 80 charsprojectIdstring (uuid)curl -X POST https://aftermatter.online/api/v1/characters/:id/reference-set/estimate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/{id}/reference-setGenerate full body, turnaround, expressions and sheet from the main look
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
kinds"portrait" | "full_body" | "angle" | "expression" | "sheet"[]requiredmodelIdstringmax 80 charsprojectIdstring (uuid)curl -X POST https://aftermatter.online/api/v1/characters/:id/reference-set \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/{id}/estimateCost and conditioning of a generation with this character
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
modelIdstringrequiredmax 80 charsmodestringmax 40 charspromptstringmax 5000 chars · default ""paramsobjectdefault {}inputsobject[]default []slotstringrequiredmax 40 charsassetIdsstring (uuid)[]requiredreferenceAssetIdsstring (uuid)[]purpose"look" | "content" | "motion"default "content"tool"influencer" | "motion" | "image" | "video"default "influencer"presetIdstringmax 40 charsformatIdstringmax 60 charsprojectIdstring (uuid)titlestringmax 200 charsidempotencyKeystringmax 120 charsrightsConfirmedbooleancurl -X POST https://aftermatter.online/api/v1/characters/:id/estimate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/{id}/generateGenerate with this character (references are attached automatically)
Scopes: content.create
Parameters
idpath · stringrequiredIdempotency-Keyheader · stringRequest body
modelIdstringrequiredmax 80 charsmodestringmax 40 charspromptstringmax 5000 chars · default ""paramsobjectdefault {}inputsobject[]default []slotstringrequiredmax 40 charsassetIdsstring (uuid)[]requiredreferenceAssetIdsstring (uuid)[]purpose"look" | "content" | "motion"default "content"tool"influencer" | "motion" | "image" | "video"default "influencer"presetIdstringmax 40 charsformatIdstringmax 60 charsprojectIdstring (uuid)titlestringmax 200 charsidempotencyKeystringmax 120 charsrightsConfirmedbooleancurl -X POST https://aftermatter.online/api/v1/characters/:id/generate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/{id}/formats/{formatId}/estimateCost of putting this character into a viral format
Scopes: content.create
Parameters
idpath · stringrequiredformatIdpath · stringrequiredRequest body
sourceVideoAssetIdstring (uuid)extraImageAssetIdsstring (uuid)[]startFrameAssetIdstring (uuid)promptstringmax 3000 charsprojectIdstring (uuid)idempotencyKeystringmax 120 charsrightsConfirmedbooleancurl -X POST https://aftermatter.online/api/v1/characters/:id/formats/:formatId/estimate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/{id}/formats/{formatId}Put this character into a viral format
Scopes: content.create
Parameters
idpath · stringrequiredformatIdpath · stringrequiredRequest body
sourceVideoAssetIdstring (uuid)extraImageAssetIdsstring (uuid)[]startFrameAssetIdstring (uuid)promptstringmax 3000 charsprojectIdstring (uuid)idempotencyKeystringmax 120 charsrightsConfirmedbooleancurl -X POST https://aftermatter.online/api/v1/characters/:id/formats/:formatId \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/characters/{id}/generationsEverything generated with this character
Scopes: content.read
Parameters
idpath · stringrequiredbeforequery · stringlimitquery · integerpurposequery · "look" | "content" | "motion" | "reference"curl -X GET https://aftermatter.online/api/v1/characters/:id/generations \ -H "Authorization: Bearer sk_live_…"
/characters/{id}/seriesContent series for this character
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/characters/:id/series \ -H "Authorization: Bearer sk_live_…"
/characters/{id}/seriesPlan a content series (ideas and drafts written by Claude)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
titlestringrequiredmax 120 charsthemestringmax 500 chars · default ""audiencestringmax 300 chars · default ""languagestringmax 20 chars · default "en"personalitystringmax 300 chars · default ""tonestringmax 120 chars · default ""categoriesstring[]default []videoSecondsinteger≥ 3 · ≤ 30 · default 8destinations"instagram_reels" | "instagram_feed" | "tiktok" | "youtube_shorts" | "meta_ads"[]default []countinteger≥ 1 · ≤ 12 · default 6curl -X POST https://aftermatter.online/api/v1/characters/:id/series \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/brandsBrand kits
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/brands \ -H "Authorization: Bearer sk_live_…"
/brandsCreate a brand kit
Scopes: content.create
Request body
namestringrequiredmax 80 charswebsitestringmax 300 chars · default ""tonestringmax 300 chars · default ""guidelinesstringmax 5000 chars · default ""colorsobject[]default []namestringmax 40 chars · default ""hexstringrequiredfontsobject[]default []namestringrequiredmax 60 charsrole"heading" | "body" | "accent"default "heading"curl -X POST https://aftermatter.online/api/v1/brands \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/brands/{id}One brand kit
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/brands/:id \ -H "Authorization: Bearer sk_live_…"
/brands/{id}Update a brand kit
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
namestringmax 80 charswebsitestringmax 300 charstonestringmax 300 charsguidelinesstringmax 5000 charscolorsobject[]namestringmax 40 chars · default ""hexstringrequiredfontsobject[]namestringrequiredmax 60 charsrole"heading" | "body" | "accent"default "heading"curl -X PATCH https://aftermatter.online/api/v1/brands/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/brands/{id}Delete a brand kit
Scopes: content.delete
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/brands/:id \ -H "Authorization: Bearer sk_live_…"
/brands/{id}/assetsAdd or remove a logo, reference or guideline file
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
assetIdstring (uuid)requiredrole"logo" | "reference" | "guideline"requiredremovebooleancurl -X POST https://aftermatter.online/api/v1/brands/:id/assets \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/products/importRead public product data from a URL into an editable draft (robots.txt respected)
Scopes: content.create
Request body
urlstringrequiredmax 2000 charscurl -X POST https://aftermatter.online/api/v1/products/import \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/products/describeDraft product details from a product photo
Scopes: content.create
Request body
assetIdstring (uuid)requiredcurl -X POST https://aftermatter.online/api/v1/products/describe \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/productsProducts
Scopes: content.read
Parameters
brandKitIdquery · string (uuid)curl -X GET https://aftermatter.online/api/v1/products \ -H "Authorization: Bearer sk_live_…"
/productsSave a product
Scopes: content.create
Request body
namestringrequiredmax 160 charsdescriptionstringmax 5000 chars · default ""categorystringmax 80 chars · default ""featuresstring[]default []benefitsstring[]default []pricestringmax 40 chars · default ""currencystringmax 8 chars · default ""urlstringmax 1000 chars · default ""brandKitIdstring (uuid)imageAssetIdsstring (uuid)[]default []source"url" | "image" | "manual" | "creative"importobjectcurl -X POST https://aftermatter.online/api/v1/products \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/products/{id}One product
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/products/:id \ -H "Authorization: Bearer sk_live_…"
/products/{id}Update a product
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
namestringmax 160 charsdescriptionstringmax 5000 charscategorystringmax 80 charsfeaturesstring[]benefitsstring[]pricestringmax 40 charscurrencystringmax 8 charsurlstringmax 1000 charsbrandKitIdstring (uuid)imageAssetIdsstring (uuid)[]curl -X PATCH https://aftermatter.online/api/v1/products/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/products/{id}Delete a product
Scopes: content.delete
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/products/:id \ -H "Authorization: Bearer sk_live_…"
/adsAd projects
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/ads \ -H "Authorization: Bearer sk_live_…"
/adsStart an ad project
Scopes: content.create
Request body
namestringrequiredmax 120 charsentry"url" | "image" | "creative" | "script" | "template" | "influencer" | "brand"default "url"productIdstring (uuid)brandKitIdstring (uuid)formatstringmax 40 chars · default "ugc"sourceAssetIdstring (uuid)presenterobjectcharacterIdsstring (uuid)[]default []curl -X POST https://aftermatter.online/api/v1/ads \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/ads/copy/{id}Edit or (de)select a copy item
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
contentstringmax 5000 charsselectedbooleandataobjectcurl -X PATCH https://aftermatter.online/api/v1/ads/copy/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/ads/copy/{id}Delete a copy item
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/ads/copy/:id \ -H "Authorization: Bearer sk_live_…"
/ads/variants/{id}/winnerMark or unmark a winning creative
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
winnerbooleanrequiredcurl -X POST https://aftermatter.online/api/v1/ads/variants/:id/winner \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/ads/{id}One ad project with its copy
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/ads/:id \ -H "Authorization: Bearer sk_live_…"
/ads/{id}Save wizard progress
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
namestringmax 120 charsproductIdstring (uuid)brandKitIdstring (uuid)formatstringmax 40 charsstepinteger≥ 1 · ≤ 8audienceobjectdescriptionstringmax 1000 charsageRangestringmax 20 charsgenderstringmax 30 charsinterestsstring[]painPointsstring[]marketstringmax 60 charslanguagestringmax 20 charsstrategyobjectobjective"awareness" | "traffic" | "conversions" | "app_installs" | "leads"platform"meta" | "tiktok" | "youtube" | "marketplace" | "web"angle"problem_solution" | "testimonial" | "before_after" | "feature_demo" | "social_proof" | "offer" | "story" | "comparison"tonestringmax 120 charsofferstringmax 300 charsnotesstringmax 1000 charspresenterobjectcharacterIdsstring (uuid)[]requiredvisualobjectstylesstring[]aspectsstring[]durationsinteger[]includeLogobooleansettingsobjectmodelIdstringmax 80 charsparamsobjectlanguagesstring[]sourceAssetIdstring (uuid)curl -X PATCH https://aftermatter.online/api/v1/ads/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/ads/{id}Delete an ad project (files stay in the library)
Scopes: content.delete
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/ads/:id \ -H "Authorization: Bearer sk_live_…"
/ads/{id}/copy/generateWrite hooks, scripts, texts, headlines, CTAs, captions and storyboards with Claude
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
kinds"hook" | "script" | "primary_text" | "headline" | "description" | "cta" | "caption" | "storyboard"[]requiredcountinteger≥ 1 · ≤ 8 · default 4languagestringmax 20 chars · default "en"replacebooleancurl -X POST https://aftermatter.online/api/v1/ads/:id/copy/generate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/ads/{id}/copyAdd copy manually
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
kind"hook" | "script" | "primary_text" | "headline" | "description" | "cta" | "caption" | "storyboard"requiredcontentstringrequiredmax 5000 charslanguagestringmax 20 chars · default "en"dataobjectcurl -X POST https://aftermatter.online/api/v1/ads/:id/copy \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/ads/{id}/matrix/previewExpand the creative matrix and price every combination
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
languagesstring[]default []hooksstring (uuid)[]default []scriptsstring (uuid)[]default []ctasstring (uuid)[]default []presentersstring[]default []stylesstring[]default []aspectsstring[]default []durationsinteger[]default []curl -X POST https://aftermatter.online/api/v1/ads/:id/matrix/preview \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/ads/{id}/matrix/runGenerate the selected combinations as one batch
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
combosobject[]requiredlanguagestringrequiredmax 20 charshookstring (uuid)requiredscriptstring (uuid)requiredctastring (uuid)requiredpresenterstringrequiredmax 40 charsstylestringrequiredmax 30 charsaspectstringrequiredmax 8 charsdurationintegerrequiredcurl -X POST https://aftermatter.online/api/v1/ads/:id/matrix/run \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/ads/{id}/variantsReview board: every variation with its dimensions and result
Scopes: content.read
Parameters
idpath · stringrequiredwinnersquery · "true" | "false"curl -X GET https://aftermatter.online/api/v1/ads/:id/variants \ -H "Authorization: Bearer sk_live_…"
/ads/{id}/exportZIP of the selected creatives with a copy sheet
Scopes: content.read
Parameters
idpath · stringrequiredRequest body
variantIdsstring (uuid)[]requiredcurl -X POST https://aftermatter.online/api/v1/ads/:id/export \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/marketing/templates/{id}/estimateCost of running a template
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
productIdstring (uuid)requiredbrandKitIdstring (uuid)characterIdstring (uuid)headlinestringmax 120 chars · default ""extrastringmax 1000 chars · default ""aspectRatiostringmax 8 charsmodelIdstringmax 80 charsparamsobjectdefault {}projectIdstring (uuid)idempotencyKeystringmax 120 charscurl -X POST https://aftermatter.online/api/v1/marketing/templates/:id/estimate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/marketing/templates/{id}/runRun a template for a product and brand
Scopes: content.create
Parameters
idpath · stringrequiredIdempotency-Keyheader · stringRequest body
productIdstring (uuid)requiredbrandKitIdstring (uuid)characterIdstring (uuid)headlinestringmax 120 chars · default ""extrastringmax 1000 chars · default ""aspectRatiostringmax 8 charsmodelIdstringmax 80 charsparamsobjectdefault {}projectIdstring (uuid)idempotencyKeystringmax 120 charscurl -X POST https://aftermatter.online/api/v1/marketing/templates/:id/run \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/editsEdit projects
Scopes: content.read
Parameters
sourceAssetIdquery · string (uuid)curl -X GET https://aftermatter.online/api/v1/edits \ -H "Authorization: Bearer sk_live_…"
/editsOpen an image or video in the editor (the original is never modified)
Scopes: content.create
Request body
sourceAssetIdstring (uuid)requirednamestringmax 120 charspreset"instagram_reel" | "tiktok" | "facebook_reel" | "facebook_feed" | "meta_ads" | "youtube_shorts" | "square" | "standard"projectIdstring (uuid)curl -X POST https://aftermatter.online/api/v1/edits \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}One edit with its assets, exports and AI tasks
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/edits/:id \ -H "Authorization: Bearer sk_live_…"
/edits/{id}Save the timeline (optimistic concurrency via version)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
timelineobjectversionnumberdefault 1clipsobject[]requiredidstringrequiredmax 40 charsassetIdstring (uuid)requiredkind"video" | "image"requiredinnumberrequired≥ 0 · ≤ 3600outnumberrequired≥ 0 · ≤ 3600fit"cover" | "contain"default "cover"cropobjectdefault nullvolumenumber≥ 0 · ≤ 2 · default 1mutedbooleandefault falsetransitionobjectdefault nullspeednumber≥ 0.25 · ≤ 4 · default 1zoomnumber≥ 1 · ≤ 2.5 · default 1textsobject[]default []idstringrequiredmax 40 charstextstringrequiredmax 300 charsstartnumberrequired≥ 0 · ≤ 3600endnumberrequired≥ 0 · ≤ 3600xnumberrequired≥ 0 · ≤ 1ynumberrequired≥ 0 · ≤ 1sizenumber≥ 12 · ≤ 220 · default 64colorstringdefault "#ffffff"backgroundstringdefault nullboldbooleandefault truealign"left" | "center" | "right"default "center"captionsobjectdefault {"enabled":false,"language":"","cues":[],"style":{"size":58,"color":"#ffffff","background":"#000000","position":"bottom","uppercase":false,"preset":"classic","highlight":"#397BFA"}}enabledbooleandefault falselanguagestringmax 20 chars · default ""cuesobject[]default []styleobjectdefault {"size":58,"color":"#ffffff","background":"#000000","position":"bottom","uppercase":false,"preset":"classic","highlight":"#397BFA"}overlaysobject[]default []idstringrequiredmax 40 charsassetIdstring (uuid)requiredstartnumberrequired≥ 0 · ≤ 3600endnumberrequired≥ 0 · ≤ 3600xnumberrequired≥ 0 · ≤ 1ynumberrequired≥ 0 · ≤ 1widthnumber≥ 0.03 · ≤ 1 · default 0.2opacitynumber≥ 0.05 · ≤ 1 · default 1audioobject[]default []idstringrequiredmax 40 charsassetIdstring (uuid)requiredkind"music" | "voiceover"requiredstartnumberrequired≥ 0 · ≤ 3600innumberrequired≥ 0 · ≤ 3600outnumberrequired≥ 0 · ≤ 3600volumenumber≥ 0 · ≤ 2 · default 1fadeInnumber≥ 0 · ≤ 10 · default 0fadeOutnumber≥ 0 · ≤ 10 · default 0backgroundstringdefault "#000000"thumbnailTimenumberdefault nullaudioFxobjectdefault {"normalize":false,"denoise":"off","fadeIn":0,"fadeOut":0}normalizebooleandefault falsedenoise"off" | "light" | "medium" | "strong"default "off"fadeInnumber≥ 0 · ≤ 10 · default 0fadeOutnumber≥ 0 · ≤ 10 · default 0videoFxobjectdefault {"fadeIn":0,"fadeOut":0}fadeInnumber≥ 0 · ≤ 10 · default 0fadeOutnumber≥ 0 · ≤ 10 · default 0namestringmax 120 charslabelstringmax 40 charspreset"instagram_reel" | "tiktok" | "facebook_reel" | "facebook_feed" | "meta_ads" | "youtube_shorts" | "square" | "standard"versionintegerrequired≥ 1 · ≤ 9007199254740991curl -X PUT https://aftermatter.online/api/v1/edits/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}Delete an edit (exports stay in the library)
Scopes: content.delete
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/edits/:id \ -H "Authorization: Bearer sk_live_…"
/edits/{id}/duplicateCreate a variation of this edit
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
labelstringmax 40 charsnamestringmax 120 charstimelineobjectversionnumberdefault 1clipsobject[]requiredidstringrequiredmax 40 charsassetIdstring (uuid)requiredkind"video" | "image"requiredinnumberrequired≥ 0 · ≤ 3600outnumberrequired≥ 0 · ≤ 3600fit"cover" | "contain"default "cover"cropobjectdefault nullvolumenumber≥ 0 · ≤ 2 · default 1mutedbooleandefault falsetransitionobjectdefault nullspeednumber≥ 0.25 · ≤ 4 · default 1zoomnumber≥ 1 · ≤ 2.5 · default 1textsobject[]default []idstringrequiredmax 40 charstextstringrequiredmax 300 charsstartnumberrequired≥ 0 · ≤ 3600endnumberrequired≥ 0 · ≤ 3600xnumberrequired≥ 0 · ≤ 1ynumberrequired≥ 0 · ≤ 1sizenumber≥ 12 · ≤ 220 · default 64colorstringdefault "#ffffff"backgroundstringdefault nullboldbooleandefault truealign"left" | "center" | "right"default "center"captionsobjectdefault {"enabled":false,"language":"","cues":[],"style":{"size":58,"color":"#ffffff","background":"#000000","position":"bottom","uppercase":false,"preset":"classic","highlight":"#397BFA"}}enabledbooleandefault falselanguagestringmax 20 chars · default ""cuesobject[]default []styleobjectdefault {"size":58,"color":"#ffffff","background":"#000000","position":"bottom","uppercase":false,"preset":"classic","highlight":"#397BFA"}overlaysobject[]default []idstringrequiredmax 40 charsassetIdstring (uuid)requiredstartnumberrequired≥ 0 · ≤ 3600endnumberrequired≥ 0 · ≤ 3600xnumberrequired≥ 0 · ≤ 1ynumberrequired≥ 0 · ≤ 1widthnumber≥ 0.03 · ≤ 1 · default 0.2opacitynumber≥ 0.05 · ≤ 1 · default 1audioobject[]default []idstringrequiredmax 40 charsassetIdstring (uuid)requiredkind"music" | "voiceover"requiredstartnumberrequired≥ 0 · ≤ 3600innumberrequired≥ 0 · ≤ 3600outnumberrequired≥ 0 · ≤ 3600volumenumber≥ 0 · ≤ 2 · default 1fadeInnumber≥ 0 · ≤ 10 · default 0fadeOutnumber≥ 0 · ≤ 10 · default 0backgroundstringdefault "#000000"thumbnailTimenumberdefault nullaudioFxobjectdefault {"normalize":false,"denoise":"off","fadeIn":0,"fadeOut":0}normalizebooleandefault falsedenoise"off" | "light" | "medium" | "strong"default "off"fadeInnumber≥ 0 · ≤ 10 · default 0fadeOutnumber≥ 0 · ≤ 10 · default 0videoFxobjectdefault {"fadeIn":0,"fadeOut":0}fadeInnumber≥ 0 · ≤ 10 · default 0fadeOutnumber≥ 0 · ≤ 10 · default 0curl -X POST https://aftermatter.online/api/v1/edits/:id/duplicate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}/renderExport with a preset (validated for codec, size, frame rate and duration)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
preset"instagram_reel" | "tiktok" | "facebook_reel" | "facebook_feed" | "meta_ads" | "youtube_shorts" | "square" | "standard"stillbooleanoptionsobjectresolution"720p" | "1080p" | "1440p" | "2160p"fpsnumber | number | number | numberquality"standard" | "high" | "max"burnCaptionsbooleancurl -X POST https://aftermatter.online/api/v1/edits/:id/render \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}/thumbnailSave the frame under the playhead as a thumbnail
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
timenumberrequired≥ 0 · ≤ 3600curl -X POST https://aftermatter.online/api/v1/edits/:id/thumbnail \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}/smart-cropSaliency-based crop rectangles for another aspect ratio
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
preset"instagram_reel" | "tiktok" | "facebook_reel" | "facebook_feed" | "meta_ads" | "youtube_shorts" | "square" | "standard"requiredcurl -X POST https://aftermatter.online/api/v1/edits/:id/smart-crop \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}/captions/estimateCost of auto captions for this edit
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
modelIdstringmax 80 charscurl -X POST https://aftermatter.online/api/v1/edits/:id/captions/estimate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}/captionsAuto captions: transcribe the edit’s audio with timestamps
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
modelIdstringmax 80 charslanguagestringmax 10 charscurl -X POST https://aftermatter.online/api/v1/edits/:id/captions \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}/captions/translateTranslate captions (timing kept)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
languagestringrequiredmax 20 charscurl -X POST https://aftermatter.online/api/v1/edits/:id/captions/translate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}/cleanupClean the edit’s audio (noise removal, speech leveling)
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/edits/:id/cleanup \ -H "Authorization: Bearer sk_live_…"
/edits/{id}/highlightsExtract highlight clips from the transcript as new variations
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
countinteger≥ 1 · ≤ 5 · default 3maxSecondsinteger≥ 5 · ≤ 90 · default 30curl -X POST https://aftermatter.online/api/v1/edits/:id/highlights \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}/analyzeAnalyze the edit's video (metadata, silences, scenes, waveform, frames; optional transcript)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
transcribebooleandefault falsecurl -X POST https://aftermatter.online/api/v1/edits/:id/analyze \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}/analysisLatest analysis of the edit's video
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/edits/:id/analysis \ -H "Authorization: Bearer sk_live_…"
/edits/{id}/ai/estimateCredits for the next AI edit instruction (planning, plus transcription the first time)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
object
curl -X POST https://aftermatter.online/api/v1/edits/:id/ai/estimate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}/aiAsk the AI editor to edit the video in natural language
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
instructionstringrequiredmax 2000 charsbaseVersionintegerrequired≥ 1 · ≤ 9007199254740991curl -X POST https://aftermatter.online/api/v1/edits/:id/ai \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}/aiThe conversation with the AI editor
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/edits/:id/ai \ -H "Authorization: Bearer sk_live_…"
/edits/{id}/versionsSaved versions of the edit
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/edits/:id/versions \ -H "Authorization: Bearer sk_live_…"
/edits/{id}/versions/{number}/restoreMake a saved version current again
Scopes: content.create
Parameters
idpath · stringrequirednumberpath · stringrequiredRequest body
baseVersionintegerrequired≥ 1 · ≤ 9007199254740991curl -X POST https://aftermatter.online/api/v1/edits/:id/versions/:number/restore \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/edits/{id}/dubDub the edit into another language with ElevenLabs (charged; the result is a new variation)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
languagestringrequiredwatermarkbooleancurl -X POST https://aftermatter.online/api/v1/edits/:id/dub \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/effects/collectionsEffect collections
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/effects/collections \ -H "Authorization: Bearer sk_live_…"
/effects/collectionsNew collection
Scopes: content.create
Request body
namestringrequiredmax 60 charscurl -X POST https://aftermatter.online/api/v1/effects/collections \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/effects/collections/{id}Delete a collection
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/effects/collections/:id \ -H "Authorization: Bearer sk_live_…"
/effects/collections/{id}/itemsAdd or remove an effect
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
effectIdstringrequiredmax 60 charsonbooleanrequiredcurl -X POST https://aftermatter.online/api/v1/effects/collections/:id/items \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/effects/{id}/estimateCredit estimate for an effect run
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
modelIdstringmax 80 charsinputsobjectdefault {}paramsobjectdefault {}projectIdstring (uuid)idempotencyKeystringmax 120 charscurl -X POST https://aftermatter.online/api/v1/effects/:id/estimate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/effects/{id}/runApply an effect
Scopes: content.create
Parameters
idpath · stringrequiredIdempotency-Keyheader · stringRequest body
modelIdstringmax 80 charsinputsobjectdefault {}paramsobjectdefault {}projectIdstring (uuid)idempotencyKeystringmax 120 charscurl -X POST https://aftermatter.online/api/v1/effects/:id/run \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/audio/mixesAudio mixes
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/audio/mixes \ -H "Authorization: Bearer sk_live_…"
/audio/mixesNew mix
Scopes: content.create
Request body
namestringrequiredmax 120 charsassetIdsstring (uuid)[]curl -X POST https://aftermatter.online/api/v1/audio/mixes \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/audio/mixes/{id}One mix
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/audio/mixes/:id \ -H "Authorization: Bearer sk_live_…"
/audio/mixes/{id}Save tracks (optimistic version)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
namestringmax 120 charstracksobject[]idstringrequiredmax 40 charsassetIdstring (uuid)requiredstartnumberrequired≥ 0 · ≤ 3600innumberrequired≥ 0 · ≤ 3600outnumberrequired≥ 0 · ≤ 3600volumenumber≥ 0 · ≤ 2 · default 1fadeInnumber≥ 0 · ≤ 30 · default 0fadeOutnumber≥ 0 · ≤ 30 · default 0mutedbooleandefault falseversionintegerrequired≥ 1 · ≤ 9007199254740991curl -X PUT https://aftermatter.online/api/v1/audio/mixes/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/audio/mixes/{id}Delete a mix
Scopes: content.delete
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/audio/mixes/:id \ -H "Authorization: Bearer sk_live_…"
/audio/mixes/{id}/exportRender the mix into a new audio file
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
format"mp3" | "wav" | "m4a"default "mp3"curl -X POST https://aftermatter.online/api/v1/audio/mixes/:id/export \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/generations/{id}/subtitlesSRT or VTT subtitles from a transcription
Scopes: content.read
Parameters
idpath · stringrequiredformatquery · "srt" | "vtt"curl -X GET https://aftermatter.online/api/v1/generations/:id/subtitles \ -H "Authorization: Bearer sk_live_…"
/cinemaCinema projects
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/cinema \ -H "Authorization: Bearer sk_live_…"
/cinemaNew cinema project
Scopes: content.create
Request body
namestringrequiredmax 120 charsloglinestringmax 1000 chars · default ""stylestringmax 500 chars · default ""aspectRatio"16:9" | "9:16" | "1:1" | "4:3" | "21:9"default "16:9"curl -X POST https://aftermatter.online/api/v1/cinema \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/cinema/scenes/{id}Edit a scene
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
titlestringmax 120 charslocationIdstringdescriptionstringmax 2000 charsmoodstringmax 200 charslightingstringmax 40 charscharactersstring (uuid)[]propsstring[]curl -X PATCH https://aftermatter.online/api/v1/cinema/scenes/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/cinema/scenes/{id}Delete a scene
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/cinema/scenes/:id \ -H "Authorization: Bearer sk_live_…"
/cinema/scenes/{id}/shotsAdd a shot
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
titlestringmax 120 chars · default ""actionstringmax 2000 chars · default ""dialoguestringmax 1000 chars · default ""cameraobjectdefault {}shotSizestringmax 30 charsanglestringmax 30 charsfocalLengthinteger≥ 8 · ≤ 400lensstringmax 30 charsdofstringmax 30 charsaperturestringmax 10 charsmovementstringmax 30 charsintensitystringmax 20 charsfocusTargetstringmax 120 charslightingstringdurationinteger≥ 2 · ≤ 20 · default 5charactersstring (uuid)[]default []propsstring[]default []promptOverridestringvideoModelIdstringcurl -X POST https://aftermatter.online/api/v1/cinema/scenes/:id/shots \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/cinema/shots/{id}Edit a shot
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
titlestringmax 120 charsactionstringmax 2000 charsdialoguestringmax 1000 charscameraobjectshotSizestringmax 30 charsanglestringmax 30 charsfocalLengthinteger≥ 8 · ≤ 400lensstringmax 30 charsdofstringmax 30 charsaperturestringmax 10 charsmovementstringmax 30 charsintensitystringmax 20 charsfocusTargetstringmax 120 charslightingstringdurationinteger≥ 2 · ≤ 20charactersstring (uuid)[]propsstring[]promptOverridestringvideoModelIdstringcurl -X PATCH https://aftermatter.online/api/v1/cinema/shots/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/cinema/shots/{id}Delete a shot
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/cinema/shots/:id \ -H "Authorization: Bearer sk_live_…"
/cinema/shots/{id}/moveReorder or move a shot
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
sceneIdstring (uuid)requiredpositionintegerrequired≥ 0 · ≤ 9007199254740991curl -X POST https://aftermatter.online/api/v1/cinema/shots/:id/move \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/cinema/shots/{id}/frameUse an image as the storyboard frame
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
assetIdstring (uuid)requiredcurl -X POST https://aftermatter.online/api/v1/cinema/shots/:id/frame \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/cinema/{id}Project with scenes, shots and continuity
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/cinema/:id \ -H "Authorization: Bearer sk_live_…"
/cinema/{id}Edit project, models and continuity library
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
namestringmax 120 charsloglinestringmax 1000 charsstylestringmax 500 charsaspectRatio"16:9" | "9:16" | "1:1" | "4:3" | "21:9"storyboardModelIdstringvideoModelIdstringcontinuityobjectcharactersstring (uuid)[]requiredlocationsobject[]requiredidstringrequiredmax 40 charsnamestringrequiredmax 80 charsdescriptionstringmax 1000 chars · default ""assetIdsstring (uuid)[]default []propsobject[]requiredidstringrequiredmax 40 charsnamestringrequiredmax 80 charsdescriptionstringmax 500 chars · default ""assetIdsstring (uuid)[]default []styleRefsstring (uuid)[]requiredwardrobestringrequiredmax 1000 charscurl -X PATCH https://aftermatter.online/api/v1/cinema/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/cinema/{id}Delete a cinema project
Scopes: content.delete
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/cinema/:id \ -H "Authorization: Bearer sk_live_…"
/cinema/{id}/scenesAdd a scene
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
titlestringrequiredmax 120 charslocationIdstringdescriptionstringmax 2000 chars · default ""moodstringmax 200 chars · default ""lightingstringmax 40 chars · default "natural"charactersstring (uuid)[]default []propsstring[]default []curl -X POST https://aftermatter.online/api/v1/cinema/:id/scenes \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/cinema/{id}/estimateCredits for storyboard frames or shot videos
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
kind"storyboard" | "video"requiredshotIdsstring (uuid)[]curl -X POST https://aftermatter.online/api/v1/cinema/:id/estimate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/cinema/{id}/generateGenerate storyboard frames or shot videos (one job per shot)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
kind"storyboard" | "video"requiredshotIdsstring (uuid)[]curl -X POST https://aftermatter.online/api/v1/cinema/:id/generate \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/cinema/{id}/directorAI Director: propose scenes, shots, camera, lighting and models (nothing is generated)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
briefstringrequiredmax 4000 charsscenesinteger≥ 1 · ≤ 8shotsPerSceneinteger≥ 1 · ≤ 8totalSecondsinteger≥ 5 · ≤ 600curl -X POST https://aftermatter.online/api/v1/cinema/:id/director \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/cinema/{id}/directorDiscard the proposal
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/cinema/:id/director \ -H "Authorization: Bearer sk_live_…"
/cinema/{id}/director/applyApply the approved proposal
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
mode"replace" | "append"default "append"curl -X POST https://aftermatter.online/api/v1/cinema/:id/director/apply \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/cinema/{id}/export/sequenceCombine shot clips into an editor project
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/cinema/:id/export/sequence \ -H "Authorization: Bearer sk_live_…"
/cinema/{id}/export/storyboardStoryboard contact sheet (PNG)
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/cinema/:id/export/storyboard \ -H "Authorization: Bearer sk_live_…"
/cinema/{id}/export/metadataProject metadata (JSON)
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/cinema/:id/export/metadata \ -H "Authorization: Bearer sk_live_…"
/canvas/templatesWorkflow templates
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/canvas/templates \ -H "Authorization: Bearer sk_live_…"
/canvas/importImport a shared workflow as a copy
Scopes: content.create
Request body
tokenstringrequiredmax 64 charscurl -X POST https://aftermatter.online/api/v1/canvas/import \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/canvas/runs/{runId}Run with per-node status and outputs
Scopes: content.read
Parameters
runIdpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/canvas/runs/:runId \ -H "Authorization: Bearer sk_live_…"
/canvas/runs/{runId}/cancelCancel a run
Scopes: content.create
Parameters
runIdpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/canvas/runs/:runId/cancel \ -H "Authorization: Bearer sk_live_…"
/canvas/runs/{runId}/retryRetry failed and skipped steps (succeeded generations are kept)
Scopes: content.create
Parameters
runIdpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/canvas/runs/:runId/retry \ -H "Authorization: Bearer sk_live_…"
/canvasWorkflows
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/canvas \ -H "Authorization: Bearer sk_live_…"
/canvasNew workflow (blank or from a template)
Scopes: content.create
Request body
namestringrequiredmax 120 charsdescriptionstringmax 1000 chars · default ""templateIdstringmax 60 charsprojectIdstring (uuid)curl -X POST https://aftermatter.online/api/v1/canvas \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/canvas/{id}Workflow with graph and validation
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/canvas/:id \ -H "Authorization: Bearer sk_live_…"
/canvas/{id}Save a workflow (graph saves need the current version)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
namestringmax 120 charsdescriptionstringmax 1000 charsgraphobjectnodesobject[]requiredidstringrequiredmax 60 charstype"prompt" | "text" | "image_input" | "video_input" | "audio_input" | "character" | "model" | "image_gen" | "video_gen" | "audio_gen" | "transform" | "upscale" | "merge" | "output" | "group"requiredpositionobjectrequireddataobjectdefault {}parentIdstringmax 60 charsstyleobjectedgesobject[]requiredidstringrequiredmax 200 charssourcestringrequiredmax 60 charstargetstringrequiredmax 60 charstargetHandlestringrequiredmax 40 charssourceHandlestringviewportobjectxnumberrequiredynumberrequiredzoomnumberrequiredversioninteger≥ 1 · ≤ 9007199254740991visibility"private" | "workspace"projectIdstring (uuid)curl -X PATCH https://aftermatter.online/api/v1/canvas/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/canvas/{id}Delete a workflow
Scopes: content.delete
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/canvas/:id \ -H "Authorization: Bearer sk_live_…"
/canvas/{id}/duplicateDuplicate a workflow
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/canvas/:id/duplicate \ -H "Authorization: Bearer sk_live_…"
/canvas/{id}/shareTurn the public share link on or off
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
onbooleanrequiredcurl -X POST https://aftermatter.online/api/v1/canvas/:id/share \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/canvas/{id}/estimateValidate the graph and estimate credits per node
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/canvas/:id/estimate \ -H "Authorization: Bearer sk_live_…"
/canvas/{id}/runsRun history
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/canvas/:id/runs \ -H "Authorization: Bearer sk_live_…"
/canvas/{id}/runsRun the workflow after confirming the estimate
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
expectedCreditsinteger≥ 0 · ≤ 9007199254740991curl -X POST https://aftermatter.online/api/v1/canvas/:id/runs \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/3d/ai/sceneAI scene assistant: prompt → validated, editable objects (nothing is saved)
Scopes: content.create
Request body
promptstringrequiredmax 2000 charsexistingstring[]curl -X POST https://aftermatter.online/api/v1/3d/ai/scene \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/3d/scenes3D scenes
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/3d/scenes \ -H "Authorization: Bearer sk_live_…"
/3d/scenesNew 3D scene
Scopes: content.create
Request body
namestringrequiredmax 120 charsprojectIdstring (uuid)sceneobjectobjectsobject[]requiredsettingsobjectdefault {"background":"#0b0f17","grid":true,"shadows":true,"fog":false}backgroundstringdefault "#0b0f17"gridbooleandefault trueshadowsbooleandefault truefogbooleandefault falseanimationobjectdefault {"duration":5,"fps":24,"keys":[]}durationnumber≥ 1 · ≤ 60 · default 5fpsinteger≥ 12 · ≤ 60 · default 24keysobject[]default []curl -X POST https://aftermatter.online/api/v1/3d/scenes \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/3d/scenes/{id}Scene with referenced files
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/3d/scenes/:id \ -H "Authorization: Bearer sk_live_…"
/3d/scenes/{id}Save the scene (needs the current version)
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
sceneobjectrequiredobjectsobject[]requiredsettingsobjectdefault {"background":"#0b0f17","grid":true,"shadows":true,"fog":false}backgroundstringdefault "#0b0f17"gridbooleandefault trueshadowsbooleandefault truefogbooleandefault falseanimationobjectdefault {"duration":5,"fps":24,"keys":[]}durationnumber≥ 1 · ≤ 60 · default 5fpsinteger≥ 12 · ≤ 60 · default 24keysobject[]default []versionintegerrequired≥ 1 · ≤ 9007199254740991curl -X PUT https://aftermatter.online/api/v1/3d/scenes/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/3d/scenes/{id}Rename or move to a project
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
namestringmax 120 charsprojectIdstring (uuid)curl -X PATCH https://aftermatter.online/api/v1/3d/scenes/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/3d/scenes/{id}Delete a scene
Scopes: content.delete
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/3d/scenes/:id \ -H "Authorization: Bearer sk_live_…"
/3d/scenes/{id}/duplicateDuplicate a scene
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/3d/scenes/:id/duplicate \ -H "Authorization: Bearer sk_live_…"
/3d/scenes/{id}/rendersRegister an uploaded render (image/animation) or GLB export of this scene
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
assetIdstring (uuid)requiredkind"image" | "animation" | "glb"requiredcurl -X POST https://aftermatter.online/api/v1/3d/scenes/:id/renders \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/agent/statusWhether the agent is configured, and its tools
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/agent/status \ -H "Authorization: Bearer sk_live_…"
/agent/sessionsYour agent conversations
Scopes: content.read
curl -X GET https://aftermatter.online/api/v1/agent/sessions \ -H "Authorization: Bearer sk_live_…"
/agent/sessionsNew conversation
Scopes: content.create
Request body
titlestringmax 120 charscurl -X POST https://aftermatter.online/api/v1/agent/sessions \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/agent/sessions/{id}Conversation with actions
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/agent/sessions/:id \ -H "Authorization: Bearer sk_live_…"
/agent/sessions/{id}Archive a conversation
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/agent/sessions/:id \ -H "Authorization: Bearer sk_live_…"
/agent/sessions/{id}/messagesSend a message; the agent plans, runs free tools and proposes paid ones
Scopes: content.create
Parameters
idpath · stringrequiredRequest body
textstringrequiredmax 8000 charscurl -X POST https://aftermatter.online/api/v1/agent/sessions/:id/messages \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/agent/actions/{id}/rejectReject a proposed action
Scopes: content.create
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/agent/actions/:id/reject \ -H "Authorization: Bearer sk_live_…"
/webhooksWebhook endpoints and the event types you can subscribe to
Scopes: webhooks.manage
curl -X GET https://aftermatter.online/api/v1/webhooks \ -H "Authorization: Bearer sk_live_…"
/webhooksSubscribe an endpoint (the signing secret is returned once)
Scopes: webhooks.manage
Request body
urlstring (uri)requiredmax 2000 charsdescriptionstringmax 200 chars · default ""events"generation.completed" | "generation.failed" | "publication.published" | "publication.failed" | "workflow.completed" | "workflow.failed" | "export.completed" | "export.failed" | "*"[]requiredcurl -X POST https://aftermatter.online/api/v1/webhooks \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/webhooks/{id}Change URL, events or status
Scopes: webhooks.manage
Parameters
idpath · stringrequiredRequest body
urlstring (uri)max 2000 charsdescriptionstringmax 200 charsevents"generation.completed" | "generation.failed" | "publication.published" | "publication.failed" | "workflow.completed" | "workflow.failed" | "export.completed" | "export.failed" | "*"[]status"active" | "disabled"curl -X PATCH https://aftermatter.online/api/v1/webhooks/:id \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{…}'/webhooks/{id}Remove an endpoint
Scopes: webhooks.manage
Parameters
idpath · stringrequiredcurl -X DELETE https://aftermatter.online/api/v1/webhooks/:id \ -H "Authorization: Bearer sk_live_…"
/webhooks/{id}/rotate-secretReplace the signing secret (returned once)
Scopes: webhooks.manage
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/webhooks/:id/rotate-secret \ -H "Authorization: Bearer sk_live_…"
/webhooks/{id}/testSend a ping now and return the delivery result
Scopes: webhooks.manage
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/webhooks/:id/test \ -H "Authorization: Bearer sk_live_…"
/webhooks/{id}/deliveriesRecent deliveries with response codes
Scopes: webhooks.manage
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/webhooks/:id/deliveries \ -H "Authorization: Bearer sk_live_…"
/webhooks/deliveries/{id}/retryRetry a failed delivery
Scopes: webhooks.manage
Parameters
idpath · stringrequiredcurl -X POST https://aftermatter.online/api/v1/webhooks/deliveries/:id/retry \ -H "Authorization: Bearer sk_live_…"
/analytics/overviewAssets, generations, posts, engagement, ads and data freshness for a period
Scopes: content.read
Parameters
daysquery · integerchannelquery · "instagram" | "tiktok"curl -X GET https://aftermatter.online/api/v1/analytics/overview \ -H "Authorization: Bearer sk_live_…"
/analytics/compareCompare post performance by hook, format, character, style or channel
Scopes: content.read
Parameters
daysquery · integerchannelquery · "instagram" | "tiktok"dimensionquery · "hook" | "format" | "character" | "style" | "channel"requiredcurl -X GET https://aftermatter.online/api/v1/analytics/compare \ -H "Authorization: Bearer sk_live_…"
/analytics/creatives/{id}Creative report: origin, edited variants, destinations and results
Scopes: content.read
Parameters
idpath · stringrequiredcurl -X GET https://aftermatter.online/api/v1/analytics/creatives/:id \ -H "Authorization: Bearer sk_live_…"