Everything the shop shows in the browser is also available as plain JSON: the catalog, the prices, a payment link for a licence, an order for a song written to a brief, and the status of that order. No API key, no sign-up — just call it. If you are wiring this into an AI assistant, use the MCP server instead: same data, ready-made tools.
Base URL https://music.cruscy.com. Everything is JSON, UTF-8, over HTTPS. Nothing is authenticated — the API only ever returns public shop data plus the state of an order whose id you already hold.
Rate limits per IP: 240 requests / 10 min for /api/, 20 / 10 min for the two checkout calls. Over the limit you get 429 with Retry-After.
Errors always look the same, so you can branch on code and show error to a human:
{ "ok": false, "error": "track not found", "code": "not_found" }
Codes you can meet: bad_json, bad_license, not_found, contact_required, accept_required, bad_promo, promo_usdt_only, usdt_off, brief_required. Machine-readable schema: /api/v1/openapi.json (OpenAPI 3.1).
not_found./api/v1/catalog?lang=en&q=&limit=200&offset=0All visible tracks. lang is en / th / ru, q matches the title, limit is capped at 200. Cached for 60 seconds.
curl -s https://music.cruscy.com/api/v1/catalog?lang=en&limit=2
{ "ok": true, "version": "1.0.0", "total": 45, "offset": 0, "limit": 2,
"tracks": [ { "id": "cabd0d4572f5", "title": "Phuket Tide Home", "lang": "en",
"seconds": 180, "preview_url": "https://music.cruscy.com/preview/cabd0d4572f5.mp3",
"tags": [] } ] }
/api/v1/track/{id}One track plus the current licence prices and where to buy it.
curl -s https://music.cruscy.com/api/v1/track/cabd0d4572f5
/api/v1/pricescurl -s https://music.cruscy.com/api/v1/prices
{ "ok": true, "currency": "USD",
"prices": { "personal": 1.99, "commercial": 19.0, "exclusive": 99.0, "custom": 49.0 },
"licenses": { "personal": "Your own videos and social posts, non-monetized.", ... },
"rails": ["card", "usdt"], "terms_url": "https://music.cruscy.com/terms" }
/api/v1/checkoutCreates an order and returns a payment link. Nothing is charged until the buyer opens that link and pays. pay is card (cards, Apple Pay, Google Pay, via Whop) or usdt (TRC20, our own gateway page).
| Field | Value |
|---|---|
track_id | required — id from the catalog |
license | required — personal / commercial / exclusive |
email | required — where the receipt and the download link go |
accept | required true — the buyer accepted the Terms, Privacy Policy and Content Policy. You are responsible for actually showing them. |
pay | optional — card (default) or usdt |
promo | optional promo code |
curl -s https://music.cruscy.com/api/v1/checkout \
-H 'content-type: application/json' \
-d '{"track_id":"cabd0d4572f5","license":"personal","email":"you@example.com","accept":true}'
{ "ok": true, "oid": "K7pQ2mZa9xE", "payment_url": "https://whop.com/checkout/...",
"rail": "config", "price_usd": 1.99,
"status_url": "https://music.cruscy.com/api/v1/order/K7pQ2mZa9xE" }
/api/v1/customSame answer shape. After payment the order goes into the studio queue automatically; the finished WAV shows up in the buyer's account and at status_url. Typical turnaround 24–48 hours.
curl -s https://music.cruscy.com/api/v1/custom \
-H 'content-type: application/json' \
-d '{"brief":"A warm lullaby for a girl named Mia, soft guitar, her name in the chorus",
"lang":"en","voice":"female","seconds":180,
"email":"you@example.com","accept":true}'
lang: en / th / ru · voice: female / male / child / duet · seconds: 60–300 (price does not depend on length).
/api/v1/order/{oid}The oid is the key: whoever has it sees that one order and nothing else — no email, no name, no other purchase. Keep it as you would keep a download link.
curl -s https://music.cruscy.com/api/v1/order/K7pQ2mZa9xE
{ "ok": true, "status": "paid", "kind": "custom", "code": "custom",
"gen_status": "generating", "gen_stage": "mastering", "ready": false,
"title": "", "payment_url": "" }
status: checkout (not paid yet — send the buyer back to payment_url) · paid · refunded. For a custom song gen_status walks queued → generating → done (or error, and then a human picks it up). When ready is true, download holds the WAV link — valid 7 days, 5 downloads.
It does not list other people's orders, it does not accept payments directly (the money always moves on Whop's checkout or our USDT page), and it does not expose the production pipeline. If you need to read a customer's whole purchase history from your own app, that needs OAuth — write to hello@cruscy.com and tell us what you are building.