Only active products are visible; a draft or archived product
answers 404, indistinguishable from a slug that never existed.
publishableKeyX-Sorai-Key<token>A store's publishable key, spk_….
slug*stringThe product.
application/jsonid*stringuuidstore_id*stringuuidslug*stringname*stringdescription*stringkind*string"file""course""membership""license""service""bundle"status*stringOnly active products are ever returned on this surface.
"draft""active""archived"cover_media_id?|nullcover_media_width?|The cover image's real pixel width, when it has one. A storefront uses this to only request a resized version that is no wider than the original.
cover_media_height?|The cover image's real pixel height, alongside cover_media_width.
settings*The built-in product page's optional selling content (a safe-markdown long description, an image gallery, a what-you-get bullet list, short testimonials and FAQ entries), rendered in this fixed order by the built-in template at /p/{slug}.
created_at*stringdate-timeupdated_at*stringdate-timeprices*array<>The product's per-currency prices.
files*Always empty for a course: its files are lessons, and the curriculum outline is the whole of what this surface says about them.
curriculum?A course's public outline, present only on the single-product read of a course: what the product page's curriculum block renders. Titles, kinds and durations only; a free-preview text lesson's body is the one piece of content included.
editions?array<>The editions this product is sold in, present only when there is more than one on sale. The product itself is one of the entries and holds no fixed place in the list, so a picker renders them in the order they arrive. prices and files above stay the product's own either way.
bundle?What a bundle contains, present only on a bundle. Names and kinds only: a buyer pays the bundle's own price, so the products inside do not carry theirs here.
curl -X GET 'https://api.sorai.ai/v1/public/products/string'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "store_id": "7fe87115-950c-4ae8-bd7e-970406bc9ac0", "slug": "string", "name": "string", "description": "string", "kind": "file", "status": "draft", "cover_media_id": "12c5ac7c-32a8-4107-8816-c7d4e05f8d74", "cover_media_width": 0, "cover_media_height": 0, "settings": { "description": "string", "gallery_media_ids": [ "a3d085db-7c4d-4720-ae79-8ca6372581bb" ], "bullets": [ "string" ], "testimonials": [ { "quote": "string", "name": "string" } ], "faq": [ { "question": "string", "answer": "string" } ] }, "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z", "prices": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "currency": "str", "amount_minor": 0, "kind": "one_time", "pay_what_you_want": true, "min_minor": 0 } ], "files": { "count": 0, "names": [ "string" ] }, "curriculum": { "lesson_count": 0, "total_duration_seconds": 0, "sections": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "title": "string", "lessons": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "kind": "video", "source": "file", "title": "string", "duration_seconds": 0, "preview": true, "embed_url": "http://example.com", "body": "string" } ] } ] }, "editions": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "edition_name": "string", "name": "string", "position": 0, "prices": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "currency": "str", "amount_minor": 0, "kind": "one_time", "pay_what_you_want": true, "min_minor": 0 } ], "files": { "count": 0, "names": [ "string" ] } } ], "bundle": { "includes": [ { "product_id": "0d012afa-f885-4e65-aeca-37e27701e2d1", "name": "string", "kind": "string", "quantity": 0, "slug": "string" } ] }}