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.
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.
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.
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
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
descriptionstring 40..4000
pricenumber | null
null = "ask the creator".
checkout_urlstring (URL HTTP(S), max. 1000) | null
cta_labelstring 0..60 | null
Card button text. null = generic button.
is_activeboolean
false pauses the product commercially (the clone stops recommending it).
publish_statusstring
Values: published · draft · archived
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
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.
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":[{"…":"…"}]}'
{ "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.
Query parameters
external_idstring 1..200required
Batch identifier used when importing.
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
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.
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.
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
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, …}.
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
curl -X DELETE "https://www.clonify.com/api/v1/products/1/faqs/1" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{}'
{ "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
curl -X DELETE "https://www.clonify.com/api/v1/products/1" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{}'
{ "id": 172, "deleted": true }