Build it your way
A REST API over pre-negotiated global inventory. Full control of search, checkout and fulfilment in your own stack.
- Complete control over UX and data
- One integration, global catalogue
- Typed, documented, LLM-friendly
Go live in under 15 minutes with the best music, sports, theatre and attraction ticketing inventory.
import { mount } from "@coras-io/embed";
const app = mount({
container: document.querySelector("#coras"),
page: "landing",
config: { locale: "en-GB", currency: "GBP" },
});
await app.ready;Trusted by the world's biggest brands
A REST API over pre-negotiated global inventory. Full control of search, checkout and fulfilment in your own stack.
Mount ready-made booking, search and checkout pages with onemount() call. The fastest path from zero to selling.
Design your pages, pick what they do, and let Claude build the site.
Use Coras Studio to design your purchase pages: colours, fonts, logo and radius, previewed against real pages.
Choose the functionality you want to include, from search and checkout to the exact pages you need.
Copy your brand.json and prompt into Claude to build your site.










Our Branding Studio lets you easily customise our ready-to-ship components. Choose the functionality you want to include, then copy your brand.json and prompt into Claude to finish your site.
How you integrate: the SDK, every framework, and the production details.
No page tags, no per-framework wrappers. One SDK, one contract.
Add the SDK to your project with your package manager of choice.
pnpm add @coras-io/embed
Point mount() at a container and a page. It renders on attach.
mount({ container, page: "search", config, });
Own routing and analytics with typed callbacks. Ship it.
app.update({ page: "details", params: { id }, });
mount() call, everywhere.One contract, eleven copy-paste bindings. React or plain HTML: the runtime behaviour is identical.
The details that decide whether an embed survives contact with a real app.
Typed onNavigate and onStateChange callbacks and framework-neutral URL helpers keep routing, analytics and URL state in your app.
Every host-facing event has a matching callback. Errors arrive safe and redacted, each with a stable code you can branch on.
Theme, chrome and events are scoped to each mount root. Run two embeds on one page and they never leak into each other.
Opt into an SDK-managed navbar and footer per slot, or bring your own. Mount just the page when you want full control.
20 languages, dozens of currencies and locale-aware defaults, with pre-negotiated inventory across 50+ countries.
mount() returns synchronously and streams the page in. Prefetch the next page so a later switch renders instantly.
Take payment the way each customer prefers: cards through Stripe, crypto through Coinbase, with capture and refunds handled for you.
Grab the docs, mount a page, and go live before your coffee gets cold.