ClonifyDevelopersOpen panel

Getting started

  • Authentication
  • Errors
  • Pagination
  • Rate limits
  • Webhooks
  • For AI agents
  • MCP server

API reference

  • Student learning activity6
  • External API deliveries6
  • Chat with the clone1
  • Contacts & tags5
  • Academy access4
  • Conversations4
  • Product catalogue11
  • External sales2
  • Knowledge12
  • Multimedia4
  • Clones (versions in the API)3
  • Meetings & bookings3
  • Webinars6
  • Account & usage1
Clonify

Product catalogue

GET/api/v1/products

List products

Your catalogue (each product's commercial card). Active only by default.

Query parameters

kindstring

Filter by type (course, masterclass, live_event…).

publish_statusstring

Values: published · draft · archived

include_inactiveboolean

true to also include paused products.

bash
curl "https://www.clonify.com/api/v1/products" \
  -H "Authorization: Bearer clk_live_…"
POST/api/v1/products

Create a product

Creates a card in the clone's catalogue. It goes live: the clone can recommend it when it fits the conversation.

Write permission

Body (JSON)

titlestring 3..200required
descriptionstring 40..4000required
pricenumber | null

Omitted or null = "ask the creator".

currencystring ISO-3

3-letter ISO. Defaults to EUR.

checkout_urlstring (URL HTTP(S), max. 1000) | null
tagsstring[]required

Product type(s): course, masterclass, book, community, coaching… At least one.

bash
curl -X POST "https://www.clonify.com/api/v1/products" \
  -H "Authorization: Bearer clk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"title":"…","description":"…","tags":["…"]}'
GET/api/v1/products/{id}

Get a product

A product's full card, FAQs included.

Path parameters

idintegerrequired
bash
curl "https://www.clonify.com/api/v1/products/1" \
  -H "Authorization: Bearer clk_live_…"
PATCH/api/v1/products/{id}

Update a product

Only the fields you send are touched. Changing title, description or types re-indexes the product for the clone's matching.

Write permission

Path parameters

idintegerrequired

Body (JSON)

replay_visibilitystring

Content history for courses, Updates and live-session replays. all grants the full archive; since_joined only content from the member's entry date. Renewals preserve that date; when access ends the content closes, and a new subscription starts a new window. Omit to keep the current setting. GET returns replay_visibility.Values: all · since_joined

titlestring 3..200
descriptionstring 40..4000
pricenumber | null

null = "ask the creator".

currencystring ISO-3
checkout_urlstring (URL HTTP(S), max. 1000) | null
cta_labelstring 0..60 | null

Card button text. null = generic button.

tagsstring[]
is_activeboolean

false pauses the product commercially (the clone stops recommending it).

publish_statusstring

Values: published · draft · archived

bash
curl -X PATCH "https://www.clonify.com/api/v1/products/1" \
  -H "Authorization: Bearer clk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"replay_visibility":"all","title":"…"}'
POST/api/v1/products/{id}/entries/import

Import content entries

Atomically append 1–50 text entries to an existing course, masterclass, capsules or downloadable product. Does not create products, change prices, access or product status, or send notifications. HTML is sanitized; maximum 50,000 characters per entry and 3 MB per request. Entries default to draft unless status=published. published_at preserves historical dates; it does not schedule publication. An identical retry returns 200 with replayed=true; the first import returns 201. Reusing external_id with different content returns 409: corrections are not synchronized.

Write permission

Path parameters

idintegerrequired

Body (JSON)

external_idstring 1..200required

Stable batch identifier within this product. Reuse it for retries.

collection_titlestring 1..200

Optional title of a new module grouping these entries.

entriesobject[]required

Ordered entries with required external_id (unique within the batch), title and html; optional description, published_at (ISO 8601 with timezone) and status (draft by default, or published). Retry with exactly the same content. Optional category (up to 80 characters) and summary_html (up to 8,000 characters, bold and italic only). b/i tags become strong/em; links, styles and executable content are removed.

bash
curl -X POST "https://www.clonify.com/api/v1/products/1/entries/import" \
  -H "Authorization: Bearer clk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"external_id":"…","entries":[{"…":"…"}]}'
json
{ "data": { "product_id": 172, "external_id": "edition-2026-09-11", "module_id": 80, "entries": [{ "external_id": "article-1", "unit_id": 501, "status": "draft" }], "replayed": false } }
GET/api/v1/products/{id}/entries/import

Retrieve an import receipt

Returns the original receipt with the created entry identifiers. Restricted to the API key's account. Returns 404 if absent. Does not reflect subsequent entry edits.

Path parameters

idintegerrequired

Query parameters

external_idstring 1..200required

Batch identifier used when importing.

bash
curl "https://www.clonify.com/api/v1/products/1/entries/import" \
  -H "Authorization: Bearer clk_live_…"
PATCH/api/v1/products/{id}/entries/import

Update entry presentation

Updates only category and summary for previously imported entries. Preserves body, dates, status, access and the original receipt. Atomic, repeatable and scoped to the key’s account and product. null clears a field; omission preserves it.

Write permission

Path parameters

idintegerrequired

Body (JSON)

external_idstring 1..200required

Original batch identifier.

entriesobject[]required

1–50 entries with the original external_id and category or summary_html. Duplicate entries are rejected.

bash
curl -X PATCH "https://www.clonify.com/api/v1/products/1/entries/import" \
  -H "Authorization: Bearer clk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"external_id":"…","entries":[{"…":"…"}]}'
GET/api/v1/products/{id}/faqs

List a product's FAQs

The answers that teach the clone to handle doubts and objections about that product.

Path parameters

idintegerrequired
bash
curl "https://www.clonify.com/api/v1/products/1/faqs" \
  -H "Authorization: Bearer clk_live_…"
POST/api/v1/products/{id}/faqs

Create a product FAQ

When someone asks something similar ABOUT that product, the clone answers as instructed.

Write permission

Path parameters

idintegerrequired

Body (JSON)

questionstring 3..300required
answerstring 1..4000required
answer_modestring

Defaults to 'free': the clone answers in its own voice, leaning on your text (the FAQ is guidance). 'contexto' pins it with higher fidelity (links, steps and facts are respected).Values: free · contexto

actionsobject[]

Actions on trigger: {type: asset|product|external_link|video_embed|escalate_offer, …}.

bash
curl -X POST "https://www.clonify.com/api/v1/products/1/faqs" \
  -H "Authorization: Bearer clk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"question":"…","answer":"…"}'
DELETE/api/v1/products/{id}/faqs/{faqId}

Delete a product FAQ

PERMANENTLY deletes the FAQ. There is no trash: if it was a mistake, create it again.

Delete permission

Path parameters

idintegerrequired
faqIdintegerrequired
bash
curl -X DELETE "https://www.clonify.com/api/v1/products/1/faqs/1" \
  -H "Authorization: Bearer clk_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
json
{ "id": 51, "product_id": 172, "deleted": true }
DELETE/api/v1/products/{id}

Delete a product

PERMANENTLY deletes the product, with its FAQs. To stop recommending it without losing it, prefer PATCH with is_active=false (pause) or publish_status='archived'.

Delete permission

Path parameters

idintegerrequired
bash
curl -X DELETE "https://www.clonify.com/api/v1/products/1" \
  -H "Authorization: Bearer clk_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
json
{ "id": 172, "deleted": true }