Incantory
Sign in

Makes API

27 operations. Authentication, errors and pagination work as described in the REST API overview.

The makes feed

GET/api/v1/makesToken optional

Published, public makes (plus your own drafts when signed in), newest first or by stars; following = makes by people you follow. Filters: tag, kind (a linked prompt's kind), model (slug), author (handle), q. Keyset-paginated with cursor.

listMakes parameters
NameTypeDescription
sort query"new" | "top" | "following"
tag querystring
kind query"text" | "chat" | "image" | "video" | "skill" | "rules" | "agent"
model querystring
author querystring
q querystring
cursor querystring
limit queryinteger (1–60)

Responses: 200 OK304, 400, 404, 429

Response fields
listMakes response fields
NameTypeDescription
itemsrequiredobject[]
nextCursorrequiredstring | nullOpaque cursor for the next page; null at the end
Example
curl 'https://incantory.ai/api/v1/makes' \
  -H "Authorization: Bearer $INCANTORY_TOKEN"

Create a make

POST/api/v1/makesToken required

A draft unless publish: true (publishing needs at least one linked prompt version). Links to your own prompts are approved immediately; others wait for the prompt owner, who is notified when the make is published. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

Request body

createMake body fields
NameTypeDescription
titlerequiredstring
slugstring
bodystring
repoUrlstring | null
demoUrlstring | null
modelstring | null
modelTextstring | null
tagsstring[]
contentRating"general" | "mature"
visibility"public" | "unlisted"
publishboolean
promptsobject[]
remixOfstring

Responses: 201 OK400, 401, 403, 404, 409, 422, 429

Response fields
createMake response fields
NameTypeDescription
idrequiredstring
slugrequiredstring
titlerequiredstring
excerptrequiredstring
authorrequiredobject
statusrequired"draft" | "published"
visibilityrequired"public" | "unlisted" | "private"
contentRatingrequired"general" | "mature" | "explicit"
coverrequiredobject | null
modelrequiredobject | null
modelTextrequiredstring | null
tagsrequiredstring[]
promptsrequiredobject[]
starCountrequiredinteger (-9007199254740991–9007199254740991)
commentCountrequiredinteger (-9007199254740991–9007199254740991)
remixCountrequiredinteger (-9007199254740991–9007199254740991)
createdAtrequiredstringISO 8601 timestamp (UTC)
publishedAtrequiredstring | null
updatedAtrequiredstringISO 8601 timestamp (UTC)
bodyrequiredstringMarkdown
repoUrlrequiredstring | null
demoUrlrequiredstring | null
remixOfrequiredobject | null
linksrequiredobject[]
galleryrequiredobject[]
filesrequiredobject[]
partsrequiredobject[]
commentsLockedrequiredboolean
deletedrequiredboolean
hiddenByModeratorrequiredboolean
canonicalPathrequiredstring
viewerrequiredobject
Example
curl -X POST 'https://incantory.ai/api/v1/makes' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"title":"title"}'

Get one make

GET/api/v1/makes/{slug}Token optional

getMake parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)

Responses: 200 OK400, 404, 410, 429

Response fields
getMake response fields
NameTypeDescription
idrequiredstring
slugrequiredstring
titlerequiredstring
excerptrequiredstring
authorrequiredobject
statusrequired"draft" | "published"
visibilityrequired"public" | "unlisted" | "private"
contentRatingrequired"general" | "mature" | "explicit"
coverrequiredobject | null
modelrequiredobject | null
modelTextrequiredstring | null
tagsrequiredstring[]
promptsrequiredobject[]
starCountrequiredinteger (-9007199254740991–9007199254740991)
commentCountrequiredinteger (-9007199254740991–9007199254740991)
remixCountrequiredinteger (-9007199254740991–9007199254740991)
createdAtrequiredstringISO 8601 timestamp (UTC)
publishedAtrequiredstring | null
updatedAtrequiredstringISO 8601 timestamp (UTC)
bodyrequiredstringMarkdown
repoUrlrequiredstring | null
demoUrlrequiredstring | null
remixOfrequiredobject | null
linksrequiredobject[]
galleryrequiredobject[]
filesrequiredobject[]
partsrequiredobject[]
commentsLockedrequiredboolean
deletedrequiredboolean
hiddenByModeratorrequiredboolean
canonicalPathrequiredstring
viewerrequiredobject
Example
curl 'https://incantory.ai/api/v1/makes/{slug}' \
  -H "Authorization: Bearer $INCANTORY_TOKEN"

Edit a make

PATCH/api/v1/makes/{slug}Token required

Owner or admin. publish publishes/unpublishes; a new slug 301s the old URL. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

updateMake parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)

Request body

updateMake body fields
NameTypeDescription
titlestring
slugstring
bodystring
repoUrlstring | null
demoUrlstring | null
modelstring | null
modelTextstring | null
tagsstring[]
contentRating"general" | "mature"
visibility"public" | "unlisted"
publishboolean

Responses: 200 OK400, 401, 403, 404, 409, 410, 422, 429

Response fields
updateMake response fields
NameTypeDescription
idrequiredstring
slugrequiredstring
titlerequiredstring
excerptrequiredstring
authorrequiredobject
statusrequired"draft" | "published"
visibilityrequired"public" | "unlisted" | "private"
contentRatingrequired"general" | "mature" | "explicit"
coverrequiredobject | null
modelrequiredobject | null
modelTextrequiredstring | null
tagsrequiredstring[]
promptsrequiredobject[]
starCountrequiredinteger (-9007199254740991–9007199254740991)
commentCountrequiredinteger (-9007199254740991–9007199254740991)
remixCountrequiredinteger (-9007199254740991–9007199254740991)
createdAtrequiredstringISO 8601 timestamp (UTC)
publishedAtrequiredstring | null
updatedAtrequiredstringISO 8601 timestamp (UTC)
bodyrequiredstringMarkdown
repoUrlrequiredstring | null
demoUrlrequiredstring | null
remixOfrequiredobject | null
linksrequiredobject[]
galleryrequiredobject[]
filesrequiredobject[]
partsrequiredobject[]
commentsLockedrequiredboolean
deletedrequiredboolean
hiddenByModeratorrequiredboolean
canonicalPathrequiredstring
viewerrequiredobject
Example
curl -X PATCH 'https://incantory.ai/api/v1/makes/{slug}' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

Delete a make (soft)

DELETE/api/v1/makes/{slug}Token required

Owner or admin. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

deleteMake parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)

Responses: 204 OK400, 401, 403, 404, 410, 429

Example
curl -X DELETE 'https://incantory.ai/api/v1/makes/{slug}' \
  -H "Authorization: Bearer $INCANTORY_TOKEN"

Attach a downloadable file

POST/api/v1/makes/{slug}/filesToken required

Served only once its malware scan is clean. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

addMakeFile parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)

Request body

addMakeFile body fields
NameTypeDescription
mediaIdrequiredstring
labelstring

Responses: 201 OK400, 401, 403, 404, 409, 422, 429

Response fields
addMakeFile response fields
NameTypeDescription
idrequiredstring
Example
curl -X POST 'https://incantory.ai/api/v1/makes/{slug}/files' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"mediaId":"mediaId"}'

Relabel a file

PATCH/api/v1/makes/{slug}/files/{id}Token required

Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

updateMakeFile parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)
id pathrequiredstringItem id

Request body

updateMakeFile body fields
NameTypeDescription
labelrequiredstring

Responses: 200 OK400, 401, 403, 404, 429

Response fields
updateMakeFile response fields
NameTypeDescription
okrequiredtrue
Example
curl -X PATCH 'https://incantory.ai/api/v1/makes/{slug}/files/{id}' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"label":"label"}'

Remove a file

DELETE/api/v1/makes/{slug}/files/{id}Token required

Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

deleteMakeFile parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)
id pathrequiredstringItem id

Responses: 204 OK400, 401, 403, 404, 429

Example
curl -X DELETE 'https://incantory.ai/api/v1/makes/{slug}/files/{id}' \
  -H "Authorization: Bearer $INCANTORY_TOKEN"

Download a file (302 to the media host)

GET/api/v1/makes/{slug}/files/{id}/downloadToken optional

409 file_not_ready while the scan runs, 409 file_blocked when it failed.

downloadMakeFile parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)
id pathrequiredstringItem id

Responses: 302, 400, 404, 409, 429

Example
curl 'https://incantory.ai/api/v1/makes/{slug}/files/{id}/download' \
  -H "Authorization: Bearer $INCANTORY_TOKEN"

Reorder files

POST/api/v1/makes/{slug}/files/reorderToken required

Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

reorderMakeFiles parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)

Request body

reorderMakeFiles body fields
NameTypeDescription
idsrequiredstring[]

Responses: 200 OK400, 401, 403, 404, 429

Response fields
reorderMakeFiles response fields
NameTypeDescription
okrequiredtrue
Example
curl -X POST 'https://incantory.ai/api/v1/makes/{slug}/files/reorder' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"ids":["ids"]}'

Add a gallery item (upload or embed)

POST/api/v1/makes/{slug}/mediaToken required

mediaId of an image/video you uploaded (POST /api/v1/uploads), or a YouTube/Vimeo/TikTok/X embedUrl (normalised; rendered as a click-to-load embed). At most 20 images. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

addMakeMedia parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)

Request body

Type: object

Responses: 201 OK400, 401, 403, 404, 409, 422, 429

Response fields
addMakeMedia response fields
NameTypeDescription
idrequiredstring
Example
curl -X POST 'https://incantory.ai/api/v1/makes/{slug}/media' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"mediaId":"mediaId"}'

Edit a gallery item (caption, alt, cover)

PATCH/api/v1/makes/{slug}/media/{id}Token required

Setting isCover unsets the previous cover. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

updateMakeMedia parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)
id pathrequiredstringItem id

Request body

updateMakeMedia body fields
NameTypeDescription
captionstring | null
altstring | null
isCoverboolean

Responses: 200 OK400, 401, 403, 404, 429

Response fields
updateMakeMedia response fields
NameTypeDescription
okrequiredtrue
Example
curl -X PATCH 'https://incantory.ai/api/v1/makes/{slug}/media/{id}' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

Remove a gallery item

DELETE/api/v1/makes/{slug}/media/{id}Token required

Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

deleteMakeMedia parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)
id pathrequiredstringItem id

Responses: 204 OK400, 401, 403, 404, 429

Example
curl -X DELETE 'https://incantory.ai/api/v1/makes/{slug}/media/{id}' \
  -H "Authorization: Bearer $INCANTORY_TOKEN"

Reorder the gallery

POST/api/v1/makes/{slug}/media/reorderToken required

ids[i] gets position i. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

reorderMakeMedia parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)

Request body

reorderMakeMedia body fields
NameTypeDescription
idsrequiredstring[]

Responses: 200 OK400, 401, 403, 404, 429

Response fields
reorderMakeMedia response fields
NameTypeDescription
okrequiredtrue
Example
curl -X POST 'https://incantory.ai/api/v1/makes/{slug}/media/reorder' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"ids":["ids"]}'

Add a parts-list line

POST/api/v1/makes/{slug}/partsToken required

At most 100 lines. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

addMakePart parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)

Request body

addMakePart body fields
NameTypeDescription
namerequiredstring
qtystring
urlstring | null
notesstring | null

Responses: 201 OK400, 401, 403, 404, 422, 429

Response fields
addMakePart response fields
NameTypeDescription
idrequiredstring
Example
curl -X POST 'https://incantory.ai/api/v1/makes/{slug}/parts' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"name":"name"}'

Edit a parts-list line

PATCH/api/v1/makes/{slug}/parts/{id}Token required

Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

updateMakePart parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)
id pathrequiredstringItem id

Request body

updateMakePart body fields
NameTypeDescription
namestring
qtystring
urlstring | null
notesstring | null

Responses: 200 OK400, 401, 403, 404, 429

Response fields
updateMakePart response fields
NameTypeDescription
okrequiredtrue
Example
curl -X PATCH 'https://incantory.ai/api/v1/makes/{slug}/parts/{id}' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

Remove a parts-list line

DELETE/api/v1/makes/{slug}/parts/{id}Token required

Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

deleteMakePart parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)
id pathrequiredstringItem id

Responses: 204 OK400, 401, 403, 404, 429

Example
curl -X DELETE 'https://incantory.ai/api/v1/makes/{slug}/parts/{id}' \
  -H "Authorization: Bearer $INCANTORY_TOKEN"

Reorder the parts list

POST/api/v1/makes/{slug}/parts/reorderToken required

Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

reorderMakeParts parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)

Request body

reorderMakeParts body fields
NameTypeDescription
idsrequiredstring[]

Responses: 200 OK400, 401, 403, 404, 429

Response fields
reorderMakeParts response fields
NameTypeDescription
okrequiredtrue
Example
curl -X POST 'https://incantory.ai/api/v1/makes/{slug}/parts/reorder' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"ids":["ids"]}'

Link a prompt version

POST/api/v1/makes/{slug}/promptsToken required

Owner. At most 10 links; yanked versions are refused. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

linkMakePrompt parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)

Request body

linkMakePrompt body fields
NameTypeDescription
promptrequiredstring
versioninteger (…–9007199254740991)

Responses: 201 OK400, 401, 403, 404, 409, 422, 429

Response fields
linkMakePrompt response fields
NameTypeDescription
idrequiredstring
slugrequiredstring
titlerequiredstring
excerptrequiredstring
authorrequiredobject
statusrequired"draft" | "published"
visibilityrequired"public" | "unlisted" | "private"
contentRatingrequired"general" | "mature" | "explicit"
coverrequiredobject | null
modelrequiredobject | null
modelTextrequiredstring | null
tagsrequiredstring[]
promptsrequiredobject[]
starCountrequiredinteger (-9007199254740991–9007199254740991)
commentCountrequiredinteger (-9007199254740991–9007199254740991)
remixCountrequiredinteger (-9007199254740991–9007199254740991)
createdAtrequiredstringISO 8601 timestamp (UTC)
publishedAtrequiredstring | null
updatedAtrequiredstringISO 8601 timestamp (UTC)
bodyrequiredstringMarkdown
repoUrlrequiredstring | null
demoUrlrequiredstring | null
remixOfrequiredobject | null
linksrequiredobject[]
galleryrequiredobject[]
filesrequiredobject[]
partsrequiredobject[]
commentsLockedrequiredboolean
deletedrequiredboolean
hiddenByModeratorrequiredboolean
canonicalPathrequiredstring
viewerrequiredobject
Example
curl -X POST 'https://incantory.ai/api/v1/makes/{slug}/prompts' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"prompt":"alice/haiku"}'

Unlink a prompt version

DELETE/api/v1/makes/{slug}/prompts/{linkId}Token required

The make's owner or an admin. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

unlinkMakePrompt parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)
linkId pathrequiredstringMakePrompt (link) id

Responses: 204 OK400, 401, 403, 404, 429

Example
curl -X DELETE 'https://incantory.ai/api/v1/makes/{slug}/prompts/{linkId}' \
  -H "Authorization: Bearer $INCANTORY_TOKEN"

POST/api/v1/makes/{slug}/prompts/{linkId}/approveToken required

Audited; the maker is notified; the prompt's make count is recounted. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

approveMakeLink parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)
linkId pathrequiredstringMakePrompt (link) id

Request body (optional)

approveMakeLink body fields
NameTypeDescription
reasonstring | null

Responses: 200 OK400, 401, 403, 404, 410, 429

Response fields
approveMakeLink response fields
NameTypeDescription
approvalrequired"approved" | "rejected"
Example
curl -X POST 'https://incantory.ai/api/v1/makes/{slug}/prompts/{linkId}/approve' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

POST/api/v1/makes/{slug}/prompts/{linkId}/pinToken required

At most 4 pinned per prompt (409 pin_limit). Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

pinMakeLink parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)
linkId pathrequiredstringMakePrompt (link) id

Request body (optional)

pinMakeLink body fields
NameTypeDescription
pinnedboolean

Responses: 200 OK400, 401, 403, 404, 409, 429

Response fields
pinMakeLink response fields
NameTypeDescription
pinnedrequiredboolean
Example
curl -X POST 'https://incantory.ai/api/v1/makes/{slug}/prompts/{linkId}/pin' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

POST/api/v1/makes/{slug}/prompts/{linkId}/rejectToken required

Audited; the maker is notified with the reason. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

rejectMakeLink parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)
linkId pathrequiredstringMakePrompt (link) id

Request body (optional)

rejectMakeLink body fields
NameTypeDescription
reasonstring | null

Responses: 200 OK400, 401, 403, 404, 410, 429

Response fields
rejectMakeLink response fields
NameTypeDescription
approvalrequired"approved" | "rejected"
Example
curl -X POST 'https://incantory.ai/api/v1/makes/{slug}/prompts/{linkId}/reject' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

Remix a make

POST/api/v1/makes/{slug}/remixToken required

Forks the make's approved prompt versions into your namespace and creates a draft make linking the forks, with remixOfMakeId set. Needs a signed-in session or an admin:mcp token (makes are not writable with a plain write token, PLAN §3).

remixMake parameters
NameTypeDescription
slug pathrequiredstringMake slug (global)

Request body (optional)

remixMake body fields
NameTypeDescription
linksstring[]

Responses: 201 OK400, 401, 403, 404, 409, 429

Response fields
remixMake response fields
NameTypeDescription
makerequiredobject
forksrequiredstring[]"owner/slug" of each fork
skippedrequiredobject[]
Example
curl -X POST 'https://incantory.ai/api/v1/makes/{slug}/remix' \
  -H "Authorization: Bearer $INCANTORY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'

A prompt's family tree

GET/api/v1/makes/family-treeToken optional

Nested JSON from the oldest visible ancestor: prompt → versions (those with forks or makes, plus the latest) → forks and approved makes. Capped at 300 prompts / 8 generations (truncated).

promptFamilyTree parameters
NameTypeDescription
prompt queryrequiredstring

Responses: 200 OK400, 404, 429

Response fields
promptFamilyTree response fields
NameTypeDescription
rootrequired__schema0
currentPromptIdrequiredstring
statsrequiredobject
truncatedrequiredboolean
generatedAtrequiredstringISO 8601 timestamp (UTC)
Example
curl 'https://incantory.ai/api/v1/makes/family-tree' \
  -H "Authorization: Bearer $INCANTORY_TOKEN"

A prompt's approved makes, pinned first

GET/api/v1/makes/galleryToken optional

promptMakesGallery parameters
NameTypeDescription
prompt queryrequiredstring
cursor querystring
limit queryinteger (1–60)

Responses: 200 OK304, 400, 404, 429

Response fields
promptMakesGallery response fields
NameTypeDescription
itemsrequiredobject[]
nextCursorrequiredstring | nullOpaque cursor for the next page; null at the end
Example
curl 'https://incantory.ai/api/v1/makes/gallery' \
  -H "Authorization: Bearer $INCANTORY_TOKEN"

Pending links waiting for your decision

GET/api/v1/makes/inboxToken required

Links to prompts you own, on published makes. Moderators/admins: all=1 for every pending link.

makesInbox parameters
NameTypeDescription
all query"0" | "1" | "true" | "false"
cursor querystring
limit queryinteger (1–100)

Responses: 200 OK400, 401, 403, 404, 429

Response fields
makesInbox response fields
NameTypeDescription
itemsrequiredobject[]
nextCursorrequiredstring | nullOpaque cursor for the next page; null at the end
pendingCountrequiredinteger (-9007199254740991–9007199254740991)
Example
curl 'https://incantory.ai/api/v1/makes/inbox' \
  -H "Authorization: Bearer $INCANTORY_TOKEN"