Products API
List and create products, and mint download URLs for your customers.
List Products
Returns every product in your organisation, with the active version joined.
GET /api/products
Response
A JSON array. Each row is the product joined to its currently active version (or null if no version is active).
[
{
"product": {
"id": "epic-drums-v1",
"name": "Epic Drum Kit Vol. 1",
"slug": "epic-drums-v1",
"status": "published",
"orgId": "audio-company",
"activeVersionId": "version_abc123",
"createdAt": "2026-04-01T00:00:00.000Z",
"updatedAt": "2026-04-15T00:00:00.000Z"
},
"activeVersion": {
"id": "version_abc123",
"productId": "epic-drums-v1",
"version": "1.0.0",
"status": "ready"
}
}
]
Create Product
Creates a new product in draft status.
POST /api/products
Request Body
{
"name": "Epic Drum Kit Vol. 2",
"slug": "epic-drums-v2",
"description": "High-energy drum samples for electronic music"
}
Field Notes
name— required, display nameslug— required, lowercase letters/numbers/hyphens only. Server normalises but it's safest to send a clean valuedescription— optional
Response
{
"id": "epic-drums-v2",
"orgId": "audio-company",
"name": "Epic Drum Kit Vol. 2",
"slug": "epic-drums-v2",
"description": "High-energy drum samples for electronic music",
"status": "draft",
"createdAt": "2026-04-01T00:00:00.000Z"
}
Update Product
Update any subset of a product's fields.
PUT /api/products/{productId}
Body is merged into the existing product row. Common fields: name, description, status (draft | published).
Generate Download URL
Mints a fresh, time-limited download token for an existing product version. This is the endpoint your storefront, webhook handler, or fulfillment workflow should call after a payment is confirmed.
POST /api/generate-download-url
Request Body
{
"productId": "epic-drums-v1",
"version": "1.0.0"
}
Response
{
"success": true,
"productId": "epic-drums-v1",
"version": "1.0.0",
"downloadToken": "8b5d…",
"downloadUrl": "https://continuata.io/download?token=8b5d…",
"expiresAt": "2026-04-02T00:00:00.000Z"
}
Tokens expire after 24 hours: Tokens minted by this endpoint are valid for 24 hours. For purchases that should remain downloadable indefinitely, point customers at continuata.io/my instead — the portal generates a fresh link on demand from any verified email.
Example: Node.js
const res = await fetch('https://continuata.io/api/generate-download-url', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CONTINUATA_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
productId: 'epic-drums-v1',
version: '1.0.0'
})
});
const { downloadUrl, expiresAt } = await res.json();
console.log('Send to customer:', downloadUrl, 'valid until', expiresAt);
Continue Reading: See Downloads & Reports for download analytics, or Webhooks for the inbound integration endpoints.