Skip to content

API reference

Every endpoint available to API keys, generated from the same definitions the server validates against.

https://aftermatter.online/api/v1

Authentication

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.

Rate limits

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

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.

Idempotency

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.

Credits

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.

Workspaces

get/workspace

Current workspace

Example
curl -X GET https://aftermatter.online/api/v1/workspace \
  -H "Authorization: Bearer sk_live_…"

Assets

post/uploads

Start an upload (returns signed URL(s))

Scopes: content.create

Request body

  • filenamestringrequiredmax 255 chars
  • mimeTypestringrequiredmax 100 chars
  • sizeintegerrequired≤ 9007199254740991
  • projectIdstring (uuid)
  • titlestringmax 200 chars
  • tagsstring[]
Example
curl -X POST https://aftermatter.online/api/v1/uploads \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/uploads/{id}/complete

Finish an upload and start processing

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • partsobject[]
    • partNumberintegerrequired≥ 1 · ≤ 10000
    • etagstringrequiredmax 200 chars
Example
curl -X POST https://aftermatter.online/api/v1/uploads/:id/complete \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/assets

List and search assets

Scopes: content.read

Parameters

  • kindquery · "image" | "video" | "audio" | "model3d" | "document" | "other"
  • sourcequery · string
  • projectIdquery · string (uuid)
  • collectionIdquery · string (uuid)
  • favoritequery · "true" | "false"
  • qquery · string
  • tagquery · string
  • limitquery · integer
  • beforequery · string
  • idsquery · string
  • characterIdquery · string (uuid)
Example
curl -X GET https://aftermatter.online/api/v1/assets \
  -H "Authorization: Bearer sk_live_…"
get/assets/{id}

Get an asset

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/assets/:id \
  -H "Authorization: Bearer sk_live_…"
patch/assets/{id}

Rename, tag, favorite, move or change visibility

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • titlestringmax 200 chars
  • tagsstring[]
  • favoriteboolean
  • projectIdstring (uuid)
  • visibility"private" | "unlisted" | "public"
Example
curl -X PATCH https://aftermatter.online/api/v1/assets/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/assets/delete

Delete assets

Scopes: content.delete

Request body

  • idsstring (uuid)[]required
Example
curl -X POST https://aftermatter.online/api/v1/assets/delete \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/assets/{id}/duplicate

Duplicate an asset

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/assets/:id/duplicate \
  -H "Authorization: Bearer sk_live_…"
get/assets/{id}/download

Short-lived download URL

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/assets/:id/download \
  -H "Authorization: Bearer sk_live_…"
get/assets/{id}/versions

Original and derived versions

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/assets/:id/versions \
  -H "Authorization: Bearer sk_live_…"
get/collections

Collections

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/collections \
  -H "Authorization: Bearer sk_live_…"
post/collections

Create a collection

Scopes: content.create

Request body

  • namestringrequiredmax 80 chars
Example
curl -X POST https://aftermatter.online/api/v1/collections \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/collections/{id}

Delete a collection (assets are kept)

Scopes: content.delete

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/collections/:id \
  -H "Authorization: Bearer sk_live_…"
post/collections/{id}/items

Add/remove assets in a collection

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • addstring (uuid)[]
  • removestring (uuid)[]
Example
curl -X POST https://aftermatter.online/api/v1/collections/:id/items \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'

Projects

get/projects

List projects

Scopes: content.read

Parameters

  • statusquery · "active" | "archived"
  • qquery · string
Example
curl -X GET https://aftermatter.online/api/v1/projects \
  -H "Authorization: Bearer sk_live_…"
post/projects

Create a project

Scopes: content.create

Request body

  • namestringrequiredmax 120 chars
  • descriptionstringmax 2000 chars
Example
curl -X POST https://aftermatter.online/api/v1/projects \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/projects/{id}

Get a project

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/projects/:id \
  -H "Authorization: Bearer sk_live_…"
patch/projects/{id}

Rename, describe, set cover, archive/restore

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • namestringmax 120 chars
  • descriptionstringmax 2000 chars
  • cover_asset_idstring (uuid)
  • status"active" | "archived"
Example
curl -X PATCH https://aftermatter.online/api/v1/projects/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/projects/{id}

Delete a project

Scopes: content.delete

Parameters

  • idpath · stringrequired
  • deleteAssetsquery · "true" | "false"
Example
curl -X DELETE https://aftermatter.online/api/v1/projects/:id \
  -H "Authorization: Bearer sk_live_…"
post/projects/{id}/duplicate

Duplicate a project

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/projects/:id/duplicate \
  -H "Authorization: Bearer sk_live_…"
post/projects/{id}/assets

Add assets to a project

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • assetIdsstring (uuid)[]required
Example
curl -X POST https://aftermatter.online/api/v1/projects/:id/assets \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/projects/{id}/assets/remove

Remove assets from a project

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • assetIdsstring (uuid)[]required
Example
curl -X POST https://aftermatter.online/api/v1/projects/:id/assets/remove \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'

Credits

get/credits

Credit balance

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/credits \
  -H "Authorization: Bearer sk_live_…"
get/credits/ledger

Credit transactions

Scopes: billing.view

Parameters

  • limitquery · integer
  • beforequery · integer
  • allquery · "true" | "false"
Example
curl -X GET https://aftermatter.online/api/v1/credits/ledger \
  -H "Authorization: Bearer sk_live_…"

Models

get/voices/elevenlabs

Voices of the connected ElevenLabs account (premade, cloned, designed)

Scopes: content.create

Example
curl -X GET https://aftermatter.online/api/v1/voices/elevenlabs \
  -H "Authorization: Bearer sk_live_…"

Generations

post/generations/estimate

Validate a request and get its credit cost (no charge)

Scopes: content.create

Request body

  • modelIdstringrequiredmax 80 chars
  • modestringmax 40 chars
  • tool"image" | "video" | "influencer" | "motion" | "lipsync" | "swap" | "ads" | "marketing" | "cinema" | "audio" | "effects" | "canvas" | "agent" | "editor" | "3d" | "api"default "image"
  • promptstringmax 50000 chars
  • negativePromptstringmax 5000 chars
  • paramsobjectdefault {}
  • inputsobject[]default []
    • slotstringrequiredmax 40 chars
    • assetIdsstring (uuid)[]default []
  • projectIdstring (uuid)
  • titlestringmax 200 chars
  • idempotencyKeystringmax 120 chars
  • contextobjectdefault {}
  • rightsConfirmedboolean
Example
curl -X POST https://aftermatter.online/api/v1/generations/estimate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/generations

Start a generation (credits are reserved, charged only on success)

Scopes: content.create

Parameters

  • Idempotency-Keyheader · string

Request body

  • modelIdstringrequiredmax 80 chars
  • modestringmax 40 chars
  • tool"image" | "video" | "influencer" | "motion" | "lipsync" | "swap" | "ads" | "marketing" | "cinema" | "audio" | "effects" | "canvas" | "agent" | "editor" | "3d" | "api"default "image"
  • promptstringmax 50000 chars
  • negativePromptstringmax 5000 chars
  • paramsobjectdefault {}
  • inputsobject[]default []
    • slotstringrequiredmax 40 chars
    • assetIdsstring (uuid)[]default []
  • projectIdstring (uuid)
  • titlestringmax 200 chars
  • idempotencyKeystringmax 120 chars
  • contextobjectdefault {}
  • rightsConfirmedboolean
Example
curl -X POST https://aftermatter.online/api/v1/generations \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/generations

Generation history and queue

Scopes: content.read

Parameters

  • statusquery · "active" | "completed" | "failed" | "all"
  • toolquery · string
  • projectIdquery · string (uuid)
  • batchIdquery · string (uuid)
  • limitquery · integer
  • beforequery · string
Example
curl -X GET https://aftermatter.online/api/v1/generations \
  -H "Authorization: Bearer sk_live_…"
get/generations/{id}

Get a generation with its outputs

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/generations/:id \
  -H "Authorization: Bearer sk_live_…"
post/generations/{id}/cancel

Cancel a generation

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/generations/:id/cancel \
  -H "Authorization: Bearer sk_live_…"
post/generations/{id}/retry

Run a failed generation again

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/generations/:id/retry \
  -H "Authorization: Bearer sk_live_…"

Prompt

post/prompt/assist

Improve, shorten, translate, vary or describe prompts

Scopes: content.create

Request body

  • action"improve" | "shorten" | "translate" | "variations" | "describe"required
  • promptstringmax 8000 chars
  • toolstringmax 20 chars
  • modestringmax 40 chars
  • modelIdstringmax 80 chars
  • assetIdstring (uuid)
  • countinteger≥ 2 · ≤ 6
Example
curl -X POST https://aftermatter.online/api/v1/prompt/assist \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'

Characters

get/characters/presets

Starter and saved builder presets

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/characters/presets \
  -H "Authorization: Bearer sk_live_…"
post/characters/presets

Save builder selections as a preset

Scopes: content.create

Request body

  • namestringrequiredmax 60 chars
  • type"natural" | "distinctive" | "extreme" | "stylized" | "fantasy"required
  • attributesobjectrequired
Example
curl -X POST https://aftermatter.online/api/v1/characters/presets \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/characters/presets/{id}

Delete a preset

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/characters/presets/:id \
  -H "Authorization: Bearer sk_live_…"
get/characters/series/{id}

A content series with its ideas and drafts

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/characters/series/:id \
  -H "Authorization: Bearer sk_live_…"
delete/characters/series/{id}

Delete a series (generated files stay in the library)

Scopes: content.delete

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/characters/series/:id \
  -H "Authorization: Bearer sk_live_…"
post/characters/series/{id}/ideas

Plan more ideas for a series

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • countinteger≥ 1 · ≤ 12 · default 4
Example
curl -X POST https://aftermatter.online/api/v1/characters/series/:id/ideas \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
patch/characters/series-items/{id}

Edit an idea

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • titlestringmax 200 chars
  • format"image" | "video"
  • hookstringmax 500 chars
  • scenestringmax 3000 chars
  • scriptstringmax 3000 chars
  • captionstringmax 2200 chars
  • hashtagsstring[]
Example
curl -X PATCH https://aftermatter.online/api/v1/characters/series-items/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/characters/series-items/{id}

Delete an idea

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/characters/series-items/:id \
  -H "Authorization: Bearer sk_live_…"
post/characters/series-items/{id}/generate

Generate the draft for an idea

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • modelIdstringmax 80 chars
  • projectIdstring (uuid)
Example
curl -X POST https://aftermatter.online/api/v1/characters/series-items/:id/generate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/characters

Saved characters (AI influencers)

Scopes: content.read

Parameters

  • favoritequery · "true" | "false"
  • qquery · string
Example
curl -X GET https://aftermatter.online/api/v1/characters \
  -H "Authorization: Bearer sk_live_…"
post/characters

Create a character

Scopes: content.create

Request body

  • namestringrequiredmax 60 chars
  • type"natural" | "distinctive" | "extreme" | "stylized" | "fantasy"default "natural"
  • attributesobjectdefault {}
  • customPromptstringmax 1500 chars · default ""
  • negativePromptstringmax 1000 chars · default ""
  • baseModelIdstring
  • seedinteger
  • voiceobject
    • modelIdstringmax 80 chars
    • voicestringmax 120 chars
    • languagestringmax 20 chars
    • descriptionstringmax 500 chars
  • personalityobject
    • traitsstring[]
    • biostringmax 1000 chars
    • nichestringmax 120 chars
  • stylePublicboolean
  • presetIdstring
  • descriptionstringmax 500 chars
  • category"fashion" | "lifestyle" | "beauty" | "comedy" | "editorial" | "technology" | "cinematic" | "fantasy" | "fitness" | "gaming" | "other"
  • studioDraftboolean
Example
curl -X POST https://aftermatter.online/api/v1/characters \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/characters/{id}

One character with references and projects

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/characters/:id \
  -H "Authorization: Bearer sk_live_…"
patch/characters/{id}

Update a character (the identity prompt is recompiled)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • namestringmax 60 chars
  • type"natural" | "distinctive" | "extreme" | "stylized" | "fantasy"
  • attributesobject
  • customPromptstringmax 1500 chars
  • negativePromptstringmax 1000 chars
  • baseModelIdstring
  • seedinteger
  • voiceobject
    • modelIdstringmax 80 chars
    • voicestringmax 120 chars
    • languagestringmax 20 chars
    • descriptionstringmax 500 chars
  • personalityobject
    • traitsstring[]
    • biostringmax 1000 chars
    • nichestringmax 120 chars
  • stylePublicboolean
  • presetIdstring
  • descriptionstringmax 500 chars
  • category"fashion" | "lifestyle" | "beauty" | "comedy" | "editorial" | "technology" | "cinematic" | "fantasy" | "fitness" | "gaming" | "other"
  • favoriteboolean
  • coverAssetIdstring (uuid)
  • saveboolean
Example
curl -X PATCH https://aftermatter.online/api/v1/characters/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/characters/{id}

Delete a character (its files stay in the library)

Scopes: content.delete

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/characters/:id \
  -H "Authorization: Bearer sk_live_…"
post/characters/{id}/duplicate

Duplicate a character

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/characters/:id/duplicate \
  -H "Authorization: Bearer sk_live_…"
post/characters/{id}/references

Add a reference image (uploads require a likeness rights confirmation)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • assetIdstring (uuid)required
  • kind"portrait" | "full_body" | "angle" | "expression" | "sheet" | "upload"
  • labelstringmax 60 chars
  • primaryboolean
  • confirmRightsboolean
Example
curl -X POST https://aftermatter.online/api/v1/characters/:id/references \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/characters/{id}/references/{assetId}

Remove a reference

Scopes: content.create

Parameters

  • idpath · stringrequired
  • assetIdpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/characters/:id/references/:assetId \
  -H "Authorization: Bearer sk_live_…"
post/characters/{id}/looks

Generate candidate looks to choose the identity from

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • modelIdstringmax 80 chars
  • countinteger≥ 1 · ≤ 4
  • projectIdstring (uuid)
Example
curl -X POST https://aftermatter.online/api/v1/characters/:id/looks \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/characters/{id}/reference-set/estimate

Cost of a reference set

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • kinds"portrait" | "full_body" | "angle" | "expression" | "sheet"[]required
  • modelIdstringmax 80 chars
  • projectIdstring (uuid)
Example
curl -X POST https://aftermatter.online/api/v1/characters/:id/reference-set/estimate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/characters/{id}/reference-set

Generate full body, turnaround, expressions and sheet from the main look

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • kinds"portrait" | "full_body" | "angle" | "expression" | "sheet"[]required
  • modelIdstringmax 80 chars
  • projectIdstring (uuid)
Example
curl -X POST https://aftermatter.online/api/v1/characters/:id/reference-set \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/characters/{id}/estimate

Cost and conditioning of a generation with this character

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • modelIdstringrequiredmax 80 chars
  • modestringmax 40 chars
  • promptstringmax 5000 chars · default ""
  • paramsobjectdefault {}
  • inputsobject[]default []
    • slotstringrequiredmax 40 chars
    • assetIdsstring (uuid)[]required
  • referenceAssetIdsstring (uuid)[]
  • purpose"look" | "content" | "motion"default "content"
  • tool"influencer" | "motion" | "image" | "video"default "influencer"
  • presetIdstringmax 40 chars
  • formatIdstringmax 60 chars
  • projectIdstring (uuid)
  • titlestringmax 200 chars
  • idempotencyKeystringmax 120 chars
  • rightsConfirmedboolean
Example
curl -X POST https://aftermatter.online/api/v1/characters/:id/estimate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/characters/{id}/generate

Generate with this character (references are attached automatically)

Scopes: content.create

Parameters

  • idpath · stringrequired
  • Idempotency-Keyheader · string

Request body

  • modelIdstringrequiredmax 80 chars
  • modestringmax 40 chars
  • promptstringmax 5000 chars · default ""
  • paramsobjectdefault {}
  • inputsobject[]default []
    • slotstringrequiredmax 40 chars
    • assetIdsstring (uuid)[]required
  • referenceAssetIdsstring (uuid)[]
  • purpose"look" | "content" | "motion"default "content"
  • tool"influencer" | "motion" | "image" | "video"default "influencer"
  • presetIdstringmax 40 chars
  • formatIdstringmax 60 chars
  • projectIdstring (uuid)
  • titlestringmax 200 chars
  • idempotencyKeystringmax 120 chars
  • rightsConfirmedboolean
Example
curl -X POST https://aftermatter.online/api/v1/characters/:id/generate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/characters/{id}/formats/{formatId}/estimate

Cost of putting this character into a viral format

Scopes: content.create

Parameters

  • idpath · stringrequired
  • formatIdpath · stringrequired

Request body

  • sourceVideoAssetIdstring (uuid)
  • extraImageAssetIdsstring (uuid)[]
  • startFrameAssetIdstring (uuid)
  • promptstringmax 3000 chars
  • projectIdstring (uuid)
  • idempotencyKeystringmax 120 chars
  • rightsConfirmedboolean
Example
curl -X POST https://aftermatter.online/api/v1/characters/:id/formats/:formatId/estimate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/characters/{id}/formats/{formatId}

Put this character into a viral format

Scopes: content.create

Parameters

  • idpath · stringrequired
  • formatIdpath · stringrequired

Request body

  • sourceVideoAssetIdstring (uuid)
  • extraImageAssetIdsstring (uuid)[]
  • startFrameAssetIdstring (uuid)
  • promptstringmax 3000 chars
  • projectIdstring (uuid)
  • idempotencyKeystringmax 120 chars
  • rightsConfirmedboolean
Example
curl -X POST https://aftermatter.online/api/v1/characters/:id/formats/:formatId \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/characters/{id}/generations

Everything generated with this character

Scopes: content.read

Parameters

  • idpath · stringrequired
  • beforequery · string
  • limitquery · integer
  • purposequery · "look" | "content" | "motion" | "reference"
Example
curl -X GET https://aftermatter.online/api/v1/characters/:id/generations \
  -H "Authorization: Bearer sk_live_…"
get/characters/{id}/series

Content series for this character

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/characters/:id/series \
  -H "Authorization: Bearer sk_live_…"
post/characters/{id}/series

Plan a content series (ideas and drafts written by Claude)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • titlestringrequiredmax 120 chars
  • themestringmax 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 8
  • destinations"instagram_reels" | "instagram_feed" | "tiktok" | "youtube_shorts" | "meta_ads"[]default []
  • countinteger≥ 1 · ≤ 12 · default 6
Example
curl -X POST https://aftermatter.online/api/v1/characters/:id/series \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'

Brand kits

get/brands

Brand kits

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/brands \
  -H "Authorization: Bearer sk_live_…"
post/brands

Create a brand kit

Scopes: content.create

Request body

  • namestringrequiredmax 80 chars
  • websitestringmax 300 chars · default ""
  • tonestringmax 300 chars · default ""
  • guidelinesstringmax 5000 chars · default ""
  • colorsobject[]default []
    • namestringmax 40 chars · default ""
    • hexstringrequired
  • fontsobject[]default []
    • namestringrequiredmax 60 chars
    • role"heading" | "body" | "accent"default "heading"
Example
curl -X POST https://aftermatter.online/api/v1/brands \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/brands/{id}

One brand kit

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/brands/:id \
  -H "Authorization: Bearer sk_live_…"
patch/brands/{id}

Update a brand kit

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • namestringmax 80 chars
  • websitestringmax 300 chars
  • tonestringmax 300 chars
  • guidelinesstringmax 5000 chars
  • colorsobject[]
    • namestringmax 40 chars · default ""
    • hexstringrequired
  • fontsobject[]
    • namestringrequiredmax 60 chars
    • role"heading" | "body" | "accent"default "heading"
Example
curl -X PATCH https://aftermatter.online/api/v1/brands/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/brands/{id}

Delete a brand kit

Scopes: content.delete

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/brands/:id \
  -H "Authorization: Bearer sk_live_…"
post/brands/{id}/assets

Add or remove a logo, reference or guideline file

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • assetIdstring (uuid)required
  • role"logo" | "reference" | "guideline"required
  • removeboolean
Example
curl -X POST https://aftermatter.online/api/v1/brands/:id/assets \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'

Products

post/products/import

Read public product data from a URL into an editable draft (robots.txt respected)

Scopes: content.create

Request body

  • urlstringrequiredmax 2000 chars
Example
curl -X POST https://aftermatter.online/api/v1/products/import \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/products/describe

Draft product details from a product photo

Scopes: content.create

Request body

  • assetIdstring (uuid)required
Example
curl -X POST https://aftermatter.online/api/v1/products/describe \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/products

Products

Scopes: content.read

Parameters

  • brandKitIdquery · string (uuid)
Example
curl -X GET https://aftermatter.online/api/v1/products \
  -H "Authorization: Bearer sk_live_…"
post/products

Save a product

Scopes: content.create

Request body

  • namestringrequiredmax 160 chars
  • descriptionstringmax 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"
  • importobject
Example
curl -X POST https://aftermatter.online/api/v1/products \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/products/{id}

One product

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/products/:id \
  -H "Authorization: Bearer sk_live_…"
patch/products/{id}

Update a product

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • namestringmax 160 chars
  • descriptionstringmax 5000 chars
  • categorystringmax 80 chars
  • featuresstring[]
  • benefitsstring[]
  • pricestringmax 40 chars
  • currencystringmax 8 chars
  • urlstringmax 1000 chars
  • brandKitIdstring (uuid)
  • imageAssetIdsstring (uuid)[]
Example
curl -X PATCH https://aftermatter.online/api/v1/products/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/products/{id}

Delete a product

Scopes: content.delete

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/products/:id \
  -H "Authorization: Bearer sk_live_…"

Ads

get/ads

Ad projects

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/ads \
  -H "Authorization: Bearer sk_live_…"
post/ads

Start an ad project

Scopes: content.create

Request body

  • namestringrequiredmax 120 chars
  • entry"url" | "image" | "creative" | "script" | "template" | "influencer" | "brand"default "url"
  • productIdstring (uuid)
  • brandKitIdstring (uuid)
  • formatstringmax 40 chars · default "ugc"
  • sourceAssetIdstring (uuid)
  • presenterobject
    • characterIdsstring (uuid)[]default []
Example
curl -X POST https://aftermatter.online/api/v1/ads \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
patch/ads/copy/{id}

Edit or (de)select a copy item

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • contentstringmax 5000 chars
  • selectedboolean
  • dataobject
Example
curl -X PATCH https://aftermatter.online/api/v1/ads/copy/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/ads/copy/{id}

Delete a copy item

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/ads/copy/:id \
  -H "Authorization: Bearer sk_live_…"
post/ads/variants/{id}/winner

Mark or unmark a winning creative

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • winnerbooleanrequired
Example
curl -X POST https://aftermatter.online/api/v1/ads/variants/:id/winner \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/ads/{id}

One ad project with its copy

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/ads/:id \
  -H "Authorization: Bearer sk_live_…"
patch/ads/{id}

Save wizard progress

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • namestringmax 120 chars
  • productIdstring (uuid)
  • brandKitIdstring (uuid)
  • formatstringmax 40 chars
  • stepinteger≥ 1 · ≤ 8
  • audienceobject
    • descriptionstringmax 1000 chars
    • ageRangestringmax 20 chars
    • genderstringmax 30 chars
    • interestsstring[]
    • painPointsstring[]
    • marketstringmax 60 chars
    • languagestringmax 20 chars
  • strategyobject
    • objective"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 chars
    • offerstringmax 300 chars
    • notesstringmax 1000 chars
  • presenterobject
    • characterIdsstring (uuid)[]required
  • visualobject
    • stylesstring[]
    • aspectsstring[]
    • durationsinteger[]
    • includeLogoboolean
  • settingsobject
    • modelIdstringmax 80 chars
    • paramsobject
    • languagesstring[]
  • sourceAssetIdstring (uuid)
Example
curl -X PATCH https://aftermatter.online/api/v1/ads/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/ads/{id}

Delete an ad project (files stay in the library)

Scopes: content.delete

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/ads/:id \
  -H "Authorization: Bearer sk_live_…"
post/ads/{id}/copy/generate

Write hooks, scripts, texts, headlines, CTAs, captions and storyboards with Claude

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • kinds"hook" | "script" | "primary_text" | "headline" | "description" | "cta" | "caption" | "storyboard"[]required
  • countinteger≥ 1 · ≤ 8 · default 4
  • languagestringmax 20 chars · default "en"
  • replaceboolean
Example
curl -X POST https://aftermatter.online/api/v1/ads/:id/copy/generate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/ads/{id}/copy

Add copy manually

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • kind"hook" | "script" | "primary_text" | "headline" | "description" | "cta" | "caption" | "storyboard"required
  • contentstringrequiredmax 5000 chars
  • languagestringmax 20 chars · default "en"
  • dataobject
Example
curl -X POST https://aftermatter.online/api/v1/ads/:id/copy \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/ads/{id}/matrix/preview

Expand the creative matrix and price every combination

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • languagesstring[]default []
  • hooksstring (uuid)[]default []
  • scriptsstring (uuid)[]default []
  • ctasstring (uuid)[]default []
  • presentersstring[]default []
  • stylesstring[]default []
  • aspectsstring[]default []
  • durationsinteger[]default []
Example
curl -X POST https://aftermatter.online/api/v1/ads/:id/matrix/preview \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/ads/{id}/matrix/run

Generate the selected combinations as one batch

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • combosobject[]required
    • languagestringrequiredmax 20 chars
    • hookstring (uuid)required
    • scriptstring (uuid)required
    • ctastring (uuid)required
    • presenterstringrequiredmax 40 chars
    • stylestringrequiredmax 30 chars
    • aspectstringrequiredmax 8 chars
    • durationintegerrequired
Example
curl -X POST https://aftermatter.online/api/v1/ads/:id/matrix/run \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/ads/{id}/variants

Review board: every variation with its dimensions and result

Scopes: content.read

Parameters

  • idpath · stringrequired
  • winnersquery · "true" | "false"
Example
curl -X GET https://aftermatter.online/api/v1/ads/:id/variants \
  -H "Authorization: Bearer sk_live_…"
post/ads/{id}/export

ZIP of the selected creatives with a copy sheet

Scopes: content.read

Parameters

  • idpath · stringrequired

Request body

  • variantIdsstring (uuid)[]required
Example
curl -X POST https://aftermatter.online/api/v1/ads/:id/export \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'

Marketing

post/marketing/templates/{id}/estimate

Cost of running a template

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • productIdstring (uuid)required
  • brandKitIdstring (uuid)
  • characterIdstring (uuid)
  • headlinestringmax 120 chars · default ""
  • extrastringmax 1000 chars · default ""
  • aspectRatiostringmax 8 chars
  • modelIdstringmax 80 chars
  • paramsobjectdefault {}
  • projectIdstring (uuid)
  • idempotencyKeystringmax 120 chars
Example
curl -X POST https://aftermatter.online/api/v1/marketing/templates/:id/estimate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/marketing/templates/{id}/run

Run a template for a product and brand

Scopes: content.create

Parameters

  • idpath · stringrequired
  • Idempotency-Keyheader · string

Request body

  • productIdstring (uuid)required
  • brandKitIdstring (uuid)
  • characterIdstring (uuid)
  • headlinestringmax 120 chars · default ""
  • extrastringmax 1000 chars · default ""
  • aspectRatiostringmax 8 chars
  • modelIdstringmax 80 chars
  • paramsobjectdefault {}
  • projectIdstring (uuid)
  • idempotencyKeystringmax 120 chars
Example
curl -X POST https://aftermatter.online/api/v1/marketing/templates/:id/run \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'

Editor

get/edits

Edit projects

Scopes: content.read

Parameters

  • sourceAssetIdquery · string (uuid)
Example
curl -X GET https://aftermatter.online/api/v1/edits \
  -H "Authorization: Bearer sk_live_…"
post/edits

Open an image or video in the editor (the original is never modified)

Scopes: content.create

Request body

  • sourceAssetIdstring (uuid)required
  • namestringmax 120 chars
  • preset"instagram_reel" | "tiktok" | "facebook_reel" | "facebook_feed" | "meta_ads" | "youtube_shorts" | "square" | "standard"
  • projectIdstring (uuid)
Example
curl -X POST https://aftermatter.online/api/v1/edits \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/edits/{id}

One edit with its assets, exports and AI tasks

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/edits/:id \
  -H "Authorization: Bearer sk_live_…"
put/edits/{id}

Save the timeline (optimistic concurrency via version)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • timelineobject
    • versionnumberdefault 1
    • clipsobject[]required
      • idstringrequiredmax 40 chars
      • assetIdstring (uuid)required
      • kind"video" | "image"required
      • innumberrequired≥ 0 · ≤ 3600
      • outnumberrequired≥ 0 · ≤ 3600
      • fit"cover" | "contain"default "cover"
      • cropobjectdefault null
      • volumenumber≥ 0 · ≤ 2 · default 1
      • mutedbooleandefault false
      • transitionobjectdefault null
      • speednumber≥ 0.25 · ≤ 4 · default 1
      • zoomnumber≥ 1 · ≤ 2.5 · default 1
    • textsobject[]default []
      • idstringrequiredmax 40 chars
      • textstringrequiredmax 300 chars
      • startnumberrequired≥ 0 · ≤ 3600
      • endnumberrequired≥ 0 · ≤ 3600
      • xnumberrequired≥ 0 · ≤ 1
      • ynumberrequired≥ 0 · ≤ 1
      • sizenumber≥ 12 · ≤ 220 · default 64
      • colorstringdefault "#ffffff"
      • backgroundstringdefault null
      • boldbooleandefault true
      • align"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 false
      • languagestringmax 20 chars · default ""
      • cuesobject[]default []
      • styleobjectdefault {"size":58,"color":"#ffffff","background":"#000000","position":"bottom","uppercase":false,"preset":"classic","highlight":"#397BFA"}
    • overlaysobject[]default []
      • idstringrequiredmax 40 chars
      • assetIdstring (uuid)required
      • startnumberrequired≥ 0 · ≤ 3600
      • endnumberrequired≥ 0 · ≤ 3600
      • xnumberrequired≥ 0 · ≤ 1
      • ynumberrequired≥ 0 · ≤ 1
      • widthnumber≥ 0.03 · ≤ 1 · default 0.2
      • opacitynumber≥ 0.05 · ≤ 1 · default 1
    • audioobject[]default []
      • idstringrequiredmax 40 chars
      • assetIdstring (uuid)required
      • kind"music" | "voiceover"required
      • startnumberrequired≥ 0 · ≤ 3600
      • innumberrequired≥ 0 · ≤ 3600
      • outnumberrequired≥ 0 · ≤ 3600
      • volumenumber≥ 0 · ≤ 2 · default 1
      • fadeInnumber≥ 0 · ≤ 10 · default 0
      • fadeOutnumber≥ 0 · ≤ 10 · default 0
    • backgroundstringdefault "#000000"
    • thumbnailTimenumberdefault null
    • audioFxobjectdefault {"normalize":false,"denoise":"off","fadeIn":0,"fadeOut":0}
      • normalizebooleandefault false
      • denoise"off" | "light" | "medium" | "strong"default "off"
      • fadeInnumber≥ 0 · ≤ 10 · default 0
      • fadeOutnumber≥ 0 · ≤ 10 · default 0
    • videoFxobjectdefault {"fadeIn":0,"fadeOut":0}
      • fadeInnumber≥ 0 · ≤ 10 · default 0
      • fadeOutnumber≥ 0 · ≤ 10 · default 0
  • namestringmax 120 chars
  • labelstringmax 40 chars
  • preset"instagram_reel" | "tiktok" | "facebook_reel" | "facebook_feed" | "meta_ads" | "youtube_shorts" | "square" | "standard"
  • versionintegerrequired≥ 1 · ≤ 9007199254740991
Example
curl -X PUT https://aftermatter.online/api/v1/edits/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/edits/{id}

Delete an edit (exports stay in the library)

Scopes: content.delete

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/edits/:id \
  -H "Authorization: Bearer sk_live_…"
post/edits/{id}/duplicate

Create a variation of this edit

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • labelstringmax 40 chars
  • namestringmax 120 chars
  • timelineobject
    • versionnumberdefault 1
    • clipsobject[]required
      • idstringrequiredmax 40 chars
      • assetIdstring (uuid)required
      • kind"video" | "image"required
      • innumberrequired≥ 0 · ≤ 3600
      • outnumberrequired≥ 0 · ≤ 3600
      • fit"cover" | "contain"default "cover"
      • cropobjectdefault null
      • volumenumber≥ 0 · ≤ 2 · default 1
      • mutedbooleandefault false
      • transitionobjectdefault null
      • speednumber≥ 0.25 · ≤ 4 · default 1
      • zoomnumber≥ 1 · ≤ 2.5 · default 1
    • textsobject[]default []
      • idstringrequiredmax 40 chars
      • textstringrequiredmax 300 chars
      • startnumberrequired≥ 0 · ≤ 3600
      • endnumberrequired≥ 0 · ≤ 3600
      • xnumberrequired≥ 0 · ≤ 1
      • ynumberrequired≥ 0 · ≤ 1
      • sizenumber≥ 12 · ≤ 220 · default 64
      • colorstringdefault "#ffffff"
      • backgroundstringdefault null
      • boldbooleandefault true
      • align"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 false
      • languagestringmax 20 chars · default ""
      • cuesobject[]default []
      • styleobjectdefault {"size":58,"color":"#ffffff","background":"#000000","position":"bottom","uppercase":false,"preset":"classic","highlight":"#397BFA"}
    • overlaysobject[]default []
      • idstringrequiredmax 40 chars
      • assetIdstring (uuid)required
      • startnumberrequired≥ 0 · ≤ 3600
      • endnumberrequired≥ 0 · ≤ 3600
      • xnumberrequired≥ 0 · ≤ 1
      • ynumberrequired≥ 0 · ≤ 1
      • widthnumber≥ 0.03 · ≤ 1 · default 0.2
      • opacitynumber≥ 0.05 · ≤ 1 · default 1
    • audioobject[]default []
      • idstringrequiredmax 40 chars
      • assetIdstring (uuid)required
      • kind"music" | "voiceover"required
      • startnumberrequired≥ 0 · ≤ 3600
      • innumberrequired≥ 0 · ≤ 3600
      • outnumberrequired≥ 0 · ≤ 3600
      • volumenumber≥ 0 · ≤ 2 · default 1
      • fadeInnumber≥ 0 · ≤ 10 · default 0
      • fadeOutnumber≥ 0 · ≤ 10 · default 0
    • backgroundstringdefault "#000000"
    • thumbnailTimenumberdefault null
    • audioFxobjectdefault {"normalize":false,"denoise":"off","fadeIn":0,"fadeOut":0}
      • normalizebooleandefault false
      • denoise"off" | "light" | "medium" | "strong"default "off"
      • fadeInnumber≥ 0 · ≤ 10 · default 0
      • fadeOutnumber≥ 0 · ≤ 10 · default 0
    • videoFxobjectdefault {"fadeIn":0,"fadeOut":0}
      • fadeInnumber≥ 0 · ≤ 10 · default 0
      • fadeOutnumber≥ 0 · ≤ 10 · default 0
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/duplicate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/edits/{id}/render

Export with a preset (validated for codec, size, frame rate and duration)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • preset"instagram_reel" | "tiktok" | "facebook_reel" | "facebook_feed" | "meta_ads" | "youtube_shorts" | "square" | "standard"
  • stillboolean
  • optionsobject
    • resolution"720p" | "1080p" | "1440p" | "2160p"
    • fpsnumber | number | number | number
    • quality"standard" | "high" | "max"
    • burnCaptionsboolean
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/render \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/edits/{id}/thumbnail

Save the frame under the playhead as a thumbnail

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • timenumberrequired≥ 0 · ≤ 3600
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/thumbnail \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/edits/{id}/smart-crop

Saliency-based crop rectangles for another aspect ratio

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • preset"instagram_reel" | "tiktok" | "facebook_reel" | "facebook_feed" | "meta_ads" | "youtube_shorts" | "square" | "standard"required
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/smart-crop \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/edits/{id}/captions/estimate

Cost of auto captions for this edit

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • modelIdstringmax 80 chars
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/captions/estimate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/edits/{id}/captions

Auto captions: transcribe the edit’s audio with timestamps

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • modelIdstringmax 80 chars
  • languagestringmax 10 chars
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/captions \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/edits/{id}/captions/translate

Translate captions (timing kept)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • languagestringrequiredmax 20 chars
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/captions/translate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/edits/{id}/cleanup

Clean the edit’s audio (noise removal, speech leveling)

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/cleanup \
  -H "Authorization: Bearer sk_live_…"
post/edits/{id}/highlights

Extract highlight clips from the transcript as new variations

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • countinteger≥ 1 · ≤ 5 · default 3
  • maxSecondsinteger≥ 5 · ≤ 90 · default 30
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/highlights \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/edits/{id}/analyze

Analyze the edit's video (metadata, silences, scenes, waveform, frames; optional transcript)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • transcribebooleandefault false
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/analyze \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/edits/{id}/analysis

Latest analysis of the edit's video

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/edits/:id/analysis \
  -H "Authorization: Bearer sk_live_…"
post/edits/{id}/ai/estimate

Credits for the next AI edit instruction (planning, plus transcription the first time)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

object

Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/ai/estimate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/edits/{id}/ai

Ask the AI editor to edit the video in natural language

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • instructionstringrequiredmax 2000 chars
  • baseVersionintegerrequired≥ 1 · ≤ 9007199254740991
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/ai \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/edits/{id}/ai

The conversation with the AI editor

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/edits/:id/ai \
  -H "Authorization: Bearer sk_live_…"
get/edits/{id}/versions

Saved versions of the edit

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/edits/:id/versions \
  -H "Authorization: Bearer sk_live_…"
post/edits/{id}/versions/{number}/restore

Make a saved version current again

Scopes: content.create

Parameters

  • idpath · stringrequired
  • numberpath · stringrequired

Request body

  • baseVersionintegerrequired≥ 1 · ≤ 9007199254740991
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/versions/:number/restore \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/edits/{id}/dub

Dub the edit into another language with ElevenLabs (charged; the result is a new variation)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • languagestringrequired
  • watermarkboolean
Example
curl -X POST https://aftermatter.online/api/v1/edits/:id/dub \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'

Effects

get/effects/collections

Effect collections

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/effects/collections \
  -H "Authorization: Bearer sk_live_…"
post/effects/collections

New collection

Scopes: content.create

Request body

  • namestringrequiredmax 60 chars
Example
curl -X POST https://aftermatter.online/api/v1/effects/collections \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/effects/collections/{id}

Delete a collection

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/effects/collections/:id \
  -H "Authorization: Bearer sk_live_…"
post/effects/collections/{id}/items

Add or remove an effect

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • effectIdstringrequiredmax 60 chars
  • onbooleanrequired
Example
curl -X POST https://aftermatter.online/api/v1/effects/collections/:id/items \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/effects/{id}/estimate

Credit estimate for an effect run

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • modelIdstringmax 80 chars
  • inputsobjectdefault {}
  • paramsobjectdefault {}
  • projectIdstring (uuid)
  • idempotencyKeystringmax 120 chars
Example
curl -X POST https://aftermatter.online/api/v1/effects/:id/estimate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/effects/{id}/run

Apply an effect

Scopes: content.create

Parameters

  • idpath · stringrequired
  • Idempotency-Keyheader · string

Request body

  • modelIdstringmax 80 chars
  • inputsobjectdefault {}
  • paramsobjectdefault {}
  • projectIdstring (uuid)
  • idempotencyKeystringmax 120 chars
Example
curl -X POST https://aftermatter.online/api/v1/effects/:id/run \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'

Audio

get/audio/mixes

Audio mixes

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/audio/mixes \
  -H "Authorization: Bearer sk_live_…"
post/audio/mixes

New mix

Scopes: content.create

Request body

  • namestringrequiredmax 120 chars
  • assetIdsstring (uuid)[]
Example
curl -X POST https://aftermatter.online/api/v1/audio/mixes \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/audio/mixes/{id}

One mix

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/audio/mixes/:id \
  -H "Authorization: Bearer sk_live_…"
put/audio/mixes/{id}

Save tracks (optimistic version)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • namestringmax 120 chars
  • tracksobject[]
    • idstringrequiredmax 40 chars
    • assetIdstring (uuid)required
    • startnumberrequired≥ 0 · ≤ 3600
    • innumberrequired≥ 0 · ≤ 3600
    • outnumberrequired≥ 0 · ≤ 3600
    • volumenumber≥ 0 · ≤ 2 · default 1
    • fadeInnumber≥ 0 · ≤ 30 · default 0
    • fadeOutnumber≥ 0 · ≤ 30 · default 0
    • mutedbooleandefault false
  • versionintegerrequired≥ 1 · ≤ 9007199254740991
Example
curl -X PUT https://aftermatter.online/api/v1/audio/mixes/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/audio/mixes/{id}

Delete a mix

Scopes: content.delete

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/audio/mixes/:id \
  -H "Authorization: Bearer sk_live_…"
post/audio/mixes/{id}/export

Render the mix into a new audio file

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • format"mp3" | "wav" | "m4a"default "mp3"
Example
curl -X POST https://aftermatter.online/api/v1/audio/mixes/:id/export \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/generations/{id}/subtitles

SRT or VTT subtitles from a transcription

Scopes: content.read

Parameters

  • idpath · stringrequired
  • formatquery · "srt" | "vtt"
Example
curl -X GET https://aftermatter.online/api/v1/generations/:id/subtitles \
  -H "Authorization: Bearer sk_live_…"

Cinema

get/cinema

Cinema projects

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/cinema \
  -H "Authorization: Bearer sk_live_…"
post/cinema

New cinema project

Scopes: content.create

Request body

  • namestringrequiredmax 120 chars
  • loglinestringmax 1000 chars · default ""
  • stylestringmax 500 chars · default ""
  • aspectRatio"16:9" | "9:16" | "1:1" | "4:3" | "21:9"default "16:9"
Example
curl -X POST https://aftermatter.online/api/v1/cinema \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
patch/cinema/scenes/{id}

Edit a scene

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • titlestringmax 120 chars
  • locationIdstring
  • descriptionstringmax 2000 chars
  • moodstringmax 200 chars
  • lightingstringmax 40 chars
  • charactersstring (uuid)[]
  • propsstring[]
Example
curl -X PATCH https://aftermatter.online/api/v1/cinema/scenes/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/cinema/scenes/{id}

Delete a scene

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/cinema/scenes/:id \
  -H "Authorization: Bearer sk_live_…"
post/cinema/scenes/{id}/shots

Add a shot

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • titlestringmax 120 chars · default ""
  • actionstringmax 2000 chars · default ""
  • dialoguestringmax 1000 chars · default ""
  • cameraobjectdefault {}
    • shotSizestringmax 30 chars
    • anglestringmax 30 chars
    • focalLengthinteger≥ 8 · ≤ 400
    • lensstringmax 30 chars
    • dofstringmax 30 chars
    • aperturestringmax 10 chars
    • movementstringmax 30 chars
    • intensitystringmax 20 chars
    • focusTargetstringmax 120 chars
  • lightingstring
  • durationinteger≥ 2 · ≤ 20 · default 5
  • charactersstring (uuid)[]default []
  • propsstring[]default []
  • promptOverridestring
  • videoModelIdstring
Example
curl -X POST https://aftermatter.online/api/v1/cinema/scenes/:id/shots \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
patch/cinema/shots/{id}

Edit a shot

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • titlestringmax 120 chars
  • actionstringmax 2000 chars
  • dialoguestringmax 1000 chars
  • cameraobject
    • shotSizestringmax 30 chars
    • anglestringmax 30 chars
    • focalLengthinteger≥ 8 · ≤ 400
    • lensstringmax 30 chars
    • dofstringmax 30 chars
    • aperturestringmax 10 chars
    • movementstringmax 30 chars
    • intensitystringmax 20 chars
    • focusTargetstringmax 120 chars
  • lightingstring
  • durationinteger≥ 2 · ≤ 20
  • charactersstring (uuid)[]
  • propsstring[]
  • promptOverridestring
  • videoModelIdstring
Example
curl -X PATCH https://aftermatter.online/api/v1/cinema/shots/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/cinema/shots/{id}

Delete a shot

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/cinema/shots/:id \
  -H "Authorization: Bearer sk_live_…"
post/cinema/shots/{id}/move

Reorder or move a shot

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • sceneIdstring (uuid)required
  • positionintegerrequired≥ 0 · ≤ 9007199254740991
Example
curl -X POST https://aftermatter.online/api/v1/cinema/shots/:id/move \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/cinema/shots/{id}/frame

Use an image as the storyboard frame

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • assetIdstring (uuid)required
Example
curl -X POST https://aftermatter.online/api/v1/cinema/shots/:id/frame \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/cinema/{id}

Project with scenes, shots and continuity

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/cinema/:id \
  -H "Authorization: Bearer sk_live_…"
patch/cinema/{id}

Edit project, models and continuity library

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • namestringmax 120 chars
  • loglinestringmax 1000 chars
  • stylestringmax 500 chars
  • aspectRatio"16:9" | "9:16" | "1:1" | "4:3" | "21:9"
  • storyboardModelIdstring
  • videoModelIdstring
  • continuityobject
    • charactersstring (uuid)[]required
    • locationsobject[]required
      • idstringrequiredmax 40 chars
      • namestringrequiredmax 80 chars
      • descriptionstringmax 1000 chars · default ""
      • assetIdsstring (uuid)[]default []
    • propsobject[]required
      • idstringrequiredmax 40 chars
      • namestringrequiredmax 80 chars
      • descriptionstringmax 500 chars · default ""
      • assetIdsstring (uuid)[]default []
    • styleRefsstring (uuid)[]required
    • wardrobestringrequiredmax 1000 chars
Example
curl -X PATCH https://aftermatter.online/api/v1/cinema/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/cinema/{id}

Delete a cinema project

Scopes: content.delete

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/cinema/:id \
  -H "Authorization: Bearer sk_live_…"
post/cinema/{id}/scenes

Add a scene

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • titlestringrequiredmax 120 chars
  • locationIdstring
  • descriptionstringmax 2000 chars · default ""
  • moodstringmax 200 chars · default ""
  • lightingstringmax 40 chars · default "natural"
  • charactersstring (uuid)[]default []
  • propsstring[]default []
Example
curl -X POST https://aftermatter.online/api/v1/cinema/:id/scenes \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/cinema/{id}/estimate

Credits for storyboard frames or shot videos

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • kind"storyboard" | "video"required
  • shotIdsstring (uuid)[]
Example
curl -X POST https://aftermatter.online/api/v1/cinema/:id/estimate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/cinema/{id}/generate

Generate storyboard frames or shot videos (one job per shot)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • kind"storyboard" | "video"required
  • shotIdsstring (uuid)[]
Example
curl -X POST https://aftermatter.online/api/v1/cinema/:id/generate \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/cinema/{id}/director

AI Director: propose scenes, shots, camera, lighting and models (nothing is generated)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • briefstringrequiredmax 4000 chars
  • scenesinteger≥ 1 · ≤ 8
  • shotsPerSceneinteger≥ 1 · ≤ 8
  • totalSecondsinteger≥ 5 · ≤ 600
Example
curl -X POST https://aftermatter.online/api/v1/cinema/:id/director \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/cinema/{id}/director

Discard the proposal

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/cinema/:id/director \
  -H "Authorization: Bearer sk_live_…"
post/cinema/{id}/director/apply

Apply the approved proposal

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • mode"replace" | "append"default "append"
Example
curl -X POST https://aftermatter.online/api/v1/cinema/:id/director/apply \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/cinema/{id}/export/sequence

Combine shot clips into an editor project

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/cinema/:id/export/sequence \
  -H "Authorization: Bearer sk_live_…"
post/cinema/{id}/export/storyboard

Storyboard contact sheet (PNG)

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/cinema/:id/export/storyboard \
  -H "Authorization: Bearer sk_live_…"
get/cinema/{id}/export/metadata

Project metadata (JSON)

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/cinema/:id/export/metadata \
  -H "Authorization: Bearer sk_live_…"

Canvas

get/canvas/templates

Workflow templates

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/canvas/templates \
  -H "Authorization: Bearer sk_live_…"
post/canvas/import

Import a shared workflow as a copy

Scopes: content.create

Request body

  • tokenstringrequiredmax 64 chars
Example
curl -X POST https://aftermatter.online/api/v1/canvas/import \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/canvas/runs/{runId}

Run with per-node status and outputs

Scopes: content.read

Parameters

  • runIdpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/canvas/runs/:runId \
  -H "Authorization: Bearer sk_live_…"
post/canvas/runs/{runId}/cancel

Cancel a run

Scopes: content.create

Parameters

  • runIdpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/canvas/runs/:runId/cancel \
  -H "Authorization: Bearer sk_live_…"
post/canvas/runs/{runId}/retry

Retry failed and skipped steps (succeeded generations are kept)

Scopes: content.create

Parameters

  • runIdpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/canvas/runs/:runId/retry \
  -H "Authorization: Bearer sk_live_…"
get/canvas

Workflows

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/canvas \
  -H "Authorization: Bearer sk_live_…"
post/canvas

New workflow (blank or from a template)

Scopes: content.create

Request body

  • namestringrequiredmax 120 chars
  • descriptionstringmax 1000 chars · default ""
  • templateIdstringmax 60 chars
  • projectIdstring (uuid)
Example
curl -X POST https://aftermatter.online/api/v1/canvas \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/canvas/{id}

Workflow with graph and validation

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/canvas/:id \
  -H "Authorization: Bearer sk_live_…"
patch/canvas/{id}

Save a workflow (graph saves need the current version)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • namestringmax 120 chars
  • descriptionstringmax 1000 chars
  • graphobject
    • nodesobject[]required
      • idstringrequiredmax 60 chars
      • type"prompt" | "text" | "image_input" | "video_input" | "audio_input" | "character" | "model" | "image_gen" | "video_gen" | "audio_gen" | "transform" | "upscale" | "merge" | "output" | "group"required
      • positionobjectrequired
      • dataobjectdefault {}
      • parentIdstringmax 60 chars
      • styleobject
    • edgesobject[]required
      • idstringrequiredmax 200 chars
      • sourcestringrequiredmax 60 chars
      • targetstringrequiredmax 60 chars
      • targetHandlestringrequiredmax 40 chars
      • sourceHandlestring
    • viewportobject
      • xnumberrequired
      • ynumberrequired
      • zoomnumberrequired
  • versioninteger≥ 1 · ≤ 9007199254740991
  • visibility"private" | "workspace"
  • projectIdstring (uuid)
Example
curl -X PATCH https://aftermatter.online/api/v1/canvas/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/canvas/{id}

Delete a workflow

Scopes: content.delete

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/canvas/:id \
  -H "Authorization: Bearer sk_live_…"
post/canvas/{id}/duplicate

Duplicate a workflow

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/canvas/:id/duplicate \
  -H "Authorization: Bearer sk_live_…"
post/canvas/{id}/share

Turn the public share link on or off

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • onbooleanrequired
Example
curl -X POST https://aftermatter.online/api/v1/canvas/:id/share \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/canvas/{id}/estimate

Validate the graph and estimate credits per node

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/canvas/:id/estimate \
  -H "Authorization: Bearer sk_live_…"
get/canvas/{id}/runs

Run history

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/canvas/:id/runs \
  -H "Authorization: Bearer sk_live_…"
post/canvas/{id}/runs

Run the workflow after confirming the estimate

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • expectedCreditsinteger≥ 0 · ≤ 9007199254740991
Example
curl -X POST https://aftermatter.online/api/v1/canvas/:id/runs \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'

3D

post/3d/ai/scene

AI scene assistant: prompt → validated, editable objects (nothing is saved)

Scopes: content.create

Request body

  • promptstringrequiredmax 2000 chars
  • existingstring[]
Example
curl -X POST https://aftermatter.online/api/v1/3d/ai/scene \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/3d/scenes

3D scenes

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/3d/scenes \
  -H "Authorization: Bearer sk_live_…"
post/3d/scenes

New 3D scene

Scopes: content.create

Request body

  • namestringrequiredmax 120 chars
  • projectIdstring (uuid)
  • sceneobject
    • objectsobject[]required
    • settingsobjectdefault {"background":"#0b0f17","grid":true,"shadows":true,"fog":false}
      • backgroundstringdefault "#0b0f17"
      • gridbooleandefault true
      • shadowsbooleandefault true
      • fogbooleandefault false
    • animationobjectdefault {"duration":5,"fps":24,"keys":[]}
      • durationnumber≥ 1 · ≤ 60 · default 5
      • fpsinteger≥ 12 · ≤ 60 · default 24
      • keysobject[]default []
Example
curl -X POST https://aftermatter.online/api/v1/3d/scenes \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/3d/scenes/{id}

Scene with referenced files

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/3d/scenes/:id \
  -H "Authorization: Bearer sk_live_…"
put/3d/scenes/{id}

Save the scene (needs the current version)

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • sceneobjectrequired
    • objectsobject[]required
    • settingsobjectdefault {"background":"#0b0f17","grid":true,"shadows":true,"fog":false}
      • backgroundstringdefault "#0b0f17"
      • gridbooleandefault true
      • shadowsbooleandefault true
      • fogbooleandefault false
    • animationobjectdefault {"duration":5,"fps":24,"keys":[]}
      • durationnumber≥ 1 · ≤ 60 · default 5
      • fpsinteger≥ 12 · ≤ 60 · default 24
      • keysobject[]default []
  • versionintegerrequired≥ 1 · ≤ 9007199254740991
Example
curl -X PUT https://aftermatter.online/api/v1/3d/scenes/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
patch/3d/scenes/{id}

Rename or move to a project

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • namestringmax 120 chars
  • projectIdstring (uuid)
Example
curl -X PATCH https://aftermatter.online/api/v1/3d/scenes/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/3d/scenes/{id}

Delete a scene

Scopes: content.delete

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/3d/scenes/:id \
  -H "Authorization: Bearer sk_live_…"
post/3d/scenes/{id}/duplicate

Duplicate a scene

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/3d/scenes/:id/duplicate \
  -H "Authorization: Bearer sk_live_…"
post/3d/scenes/{id}/renders

Register an uploaded render (image/animation) or GLB export of this scene

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • assetIdstring (uuid)required
  • kind"image" | "animation" | "glb"required
Example
curl -X POST https://aftermatter.online/api/v1/3d/scenes/:id/renders \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'

Agent

get/agent/status

Whether the agent is configured, and its tools

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/agent/status \
  -H "Authorization: Bearer sk_live_…"
get/agent/sessions

Your agent conversations

Scopes: content.read

Example
curl -X GET https://aftermatter.online/api/v1/agent/sessions \
  -H "Authorization: Bearer sk_live_…"
post/agent/sessions

New conversation

Scopes: content.create

Request body

  • titlestringmax 120 chars
Example
curl -X POST https://aftermatter.online/api/v1/agent/sessions \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
get/agent/sessions/{id}

Conversation with actions

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/agent/sessions/:id \
  -H "Authorization: Bearer sk_live_…"
delete/agent/sessions/{id}

Archive a conversation

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/agent/sessions/:id \
  -H "Authorization: Bearer sk_live_…"
post/agent/sessions/{id}/messages

Send a message; the agent plans, runs free tools and proposes paid ones

Scopes: content.create

Parameters

  • idpath · stringrequired

Request body

  • textstringrequiredmax 8000 chars
Example
curl -X POST https://aftermatter.online/api/v1/agent/sessions/:id/messages \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
post/agent/actions/{id}/reject

Reject a proposed action

Scopes: content.create

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/agent/actions/:id/reject \
  -H "Authorization: Bearer sk_live_…"

Webhooks

get/webhooks

Webhook endpoints and the event types you can subscribe to

Scopes: webhooks.manage

Example
curl -X GET https://aftermatter.online/api/v1/webhooks \
  -H "Authorization: Bearer sk_live_…"
post/webhooks

Subscribe an endpoint (the signing secret is returned once)

Scopes: webhooks.manage

Request body

  • urlstring (uri)requiredmax 2000 chars
  • descriptionstringmax 200 chars · default ""
  • events"generation.completed" | "generation.failed" | "publication.published" | "publication.failed" | "workflow.completed" | "workflow.failed" | "export.completed" | "export.failed" | "*"[]required
Example
curl -X POST https://aftermatter.online/api/v1/webhooks \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
patch/webhooks/{id}

Change URL, events or status

Scopes: webhooks.manage

Parameters

  • idpath · stringrequired

Request body

  • urlstring (uri)max 2000 chars
  • descriptionstringmax 200 chars
  • events"generation.completed" | "generation.failed" | "publication.published" | "publication.failed" | "workflow.completed" | "workflow.failed" | "export.completed" | "export.failed" | "*"[]
  • status"active" | "disabled"
Example
curl -X PATCH https://aftermatter.online/api/v1/webhooks/:id \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{…}'
delete/webhooks/{id}

Remove an endpoint

Scopes: webhooks.manage

Parameters

  • idpath · stringrequired
Example
curl -X DELETE https://aftermatter.online/api/v1/webhooks/:id \
  -H "Authorization: Bearer sk_live_…"
post/webhooks/{id}/rotate-secret

Replace the signing secret (returned once)

Scopes: webhooks.manage

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/webhooks/:id/rotate-secret \
  -H "Authorization: Bearer sk_live_…"
post/webhooks/{id}/test

Send a ping now and return the delivery result

Scopes: webhooks.manage

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/webhooks/:id/test \
  -H "Authorization: Bearer sk_live_…"
get/webhooks/{id}/deliveries

Recent deliveries with response codes

Scopes: webhooks.manage

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/webhooks/:id/deliveries \
  -H "Authorization: Bearer sk_live_…"
post/webhooks/deliveries/{id}/retry

Retry a failed delivery

Scopes: webhooks.manage

Parameters

  • idpath · stringrequired
Example
curl -X POST https://aftermatter.online/api/v1/webhooks/deliveries/:id/retry \
  -H "Authorization: Bearer sk_live_…"

Analytics

get/analytics/overview

Assets, generations, posts, engagement, ads and data freshness for a period

Scopes: content.read

Parameters

  • daysquery · integer
  • channelquery · "instagram" | "tiktok"
Example
curl -X GET https://aftermatter.online/api/v1/analytics/overview \
  -H "Authorization: Bearer sk_live_…"
get/analytics/compare

Compare post performance by hook, format, character, style or channel

Scopes: content.read

Parameters

  • daysquery · integer
  • channelquery · "instagram" | "tiktok"
  • dimensionquery · "hook" | "format" | "character" | "style" | "channel"required
Example
curl -X GET https://aftermatter.online/api/v1/analytics/compare \
  -H "Authorization: Bearer sk_live_…"
get/analytics/creatives/{id}

Creative report: origin, edited variants, destinations and results

Scopes: content.read

Parameters

  • idpath · stringrequired
Example
curl -X GET https://aftermatter.online/api/v1/analytics/creatives/:id \
  -H "Authorization: Bearer sk_live_…"