Quickstart

The complete tool surface, end to end.

Thirteen tools behind one stateless MCP endpoint: eight creative/verification capabilities, four durable job controls, and the free style catalog. Everything below is copy-paste against production. Paid calls return HTTP 402 first — that is the payment challenge, and the payments page shows the ~30 lines that answer it. Verification never costs anything.

The endpoint

fieldtypenotes
endpointPOST onlyhttps://api.occestra.xyz/mcp — MCP streamable HTTP, stateless: a fresh server per request, no session to manage.
manifestGEThttps://api.occestra.xyz/.well-known/occestra.json — tools, prices, payment standard, House Styles, provenance constants.
rate limit60/min/IP429 beyond that. Paid settlement is your throughput ceiling in practice.

Prices, from the same table the gate enforces:

fieldtypenotes
oce_plan_occasion0.30 USDTA grounded plan: real venues, real forecast, schedule, budget, contingencies
oce_design_invite0.75 USDTAn invitation suite in a curated House Style
oce_make_keepsake0.75 USDTKeepsake artwork + a story page from a moment that already happened
oce_write_toast0.10 USDTA toast written for the room, not for the internet
oce_moodboard0.30 USDTA directed moodboard on a versioned style system
oce_launch_kit1.50 USDTHero visual, brand genome, launch thread, demo beat sheet, OG image
oce_critique0.01 USDTYour artifact, graded against the published OQS — repair brief included
oce_verify_keepsakefreeVerify any seal against X Layer. Free forever
oce_create_pack_jobat costRun any of the above as a background job — costs exactly what that tool costs
oce_job_statusfreeWhere your job has got to, with the real event feed. Free
oce_job_resultfreeCollect the finished pack. Free — you already paid
oce_cancel_jobfreeStop a job. Free. Queued cancels refund in full
oce_style_catalogfreeEvery House Style, its real palette, and a real passing example. Free — call it first

What every paid tool returns

One shape, everywhere. The pack is the product; the report and the seal are the proof:

response — the result content, parsed

{
  "keepsakeId": "oce_01kxbz33bb4grnd1xh0gev",   // stable id, /^oce_[0-9a-z]{22}$/
  "studio": "celebrate",
  "quality": {
    "oqsVersion": "1.2.0",                       // the rubric version that graded this
    "passRate": 1,                               // artifacts passing / artifacts graded
    "repairedCount": 0                           // Tribunal repair passes that ran
  },
  "coverageGaps": [],                            // honest list of what degraded, if anything
  "artifacts": [{
    "id": "plan", "kind": "plan", "title": "…", "format": "json",
    "content": "…",                              // inline for text; images get:
    "url": "https://api.occestra.xyz/a/…?exp=…&tok=…",  // signed, expiring
    "sources": [{ "source": "openstreetmap", "retrievedAt": "…", "url": "…" }],
    "tribunal": { "pass": true, "repairs": 0, "axes": { "composition": 85, … },
                  "deterministic": [ … ], "issues": [], "coverageGaps": [] }
  }],
  "seal": {                                      // present when the sealer key is live
    "keepsakeId": "…", "manifestHash": "0x…", "packKind": 0, "createdAt": 1783886884,
    "signature": "0x…", "signer": "0x0d63f9EeB86813230B72017444cea16Cd4A453F2",
    "chainId": 196, "verifyingContract": "0x1653509df702b45d67b3eb12ca37de9f5fc21f08",
    "leaf": "0x…", "anchored": true, "anchorTx": "0x…"
  },
  "publicPage": "https://occestra.xyz/k/oce_01kxbz33bb4grnd1xh0gev"
}
That example is a real pack. Fetch it yourself: curl https://api.occestra.xyz/k/oce_01kxbz33bb4grnd1xh0gev — or see it rendered at /k/oce_01kxbz33bb4grnd1xh0gev.

oce_plan_occasion — 0.30 USDT

The full CELEBRATE studio: a plan grounded in real venues (OpenStreetMap, ranked and chain-demoted) and a real forecast (Open-Meteo), plus schedule, budget, contingency branches and a shareable guest guide. Every grounded claim carries its source and retrieval timestamp. No venue is ever claimed as booked.

fieldtypenotes
occasion *stringWhat is being celebrated, in your words.
city *stringWhere. Geocoded against real places.
date *stringISO date. Forecasts only exist ~10 days out; beyond that the plan says so instead of guessing.
headcount *number1–500.
vibe *stringThe register: 'warm, candlelit, unhurried'.
budgetUsdnumberOptional. Budget artifact must sum to it (BUDGET_SUM_MISMATCH is a hard check).
styleIdHouseStyleIdamethyst_editorial · gilded_noir · sunprint · atlas_ink. Default: atlas_ink.
deliverablesCelebrateKind[]Subset of plan · schedule · budget · contingency · guest_guide. Default: all five.

request

curl -s -X POST https://api.occestra.xyz/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": { "name": "oce_plan_occasion", "arguments": {
      "occasion": "A farewell dinner for a friend moving abroad",
      "city": "Lisbon", "date": "2026-07-19", "headcount": 8,
      "vibe": "warm, unhurried, a long table, good wine"
    } }
  }'

oce_design_invite — 0.75 USDT

An invitation suite rendered in a versioned House Style, contrast-checked and dimension-checked by the Tribunal.

fieldtypenotes
occasion *stringWhat the invite is for.
date *stringPrinted on the invite; DATE_INVALID is a hard check.
citystringOptional location line.
styleIdHouseStyleIdVisual system for the render.
detailstringAnything the design should honor.

request

curl -s -X POST https://api.occestra.xyz/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": { "name": "oce_design_invite", "arguments": {
      "occasion": "Amara's graduation dinner", "date": "2026-08-02",
      "city": "Lagos", "styleId": "gilded_noir"
    } }
  }'

oce_make_keepsake — 0.75 USDT

The REMEMBER studio: keepsake artwork in a curated style plus a story page that strictly separates what your photographs establish from what is written as prose. People in your photos are counted, never identified. Uploads (optional) go to POST /uploads first — EXIF and GPS are stripped on arrival, the original bytes are never written to disk, and DELETE /projects/:id removes pack, artifacts and photographs, verified.

fieldtypenotes
title *stringWhat you call this memory.
descriptionstringWhat happened, in your words. Names you use are treated as your facts about your own life.
momentDatestringWhen it happened.
tonestring'nostalgic, quiet'.
mediaRefsstring[]Private upload keys from POST /uploads (max 8).
confirmGraphStoryGraphYour corrected story graph — used exactly as given, no re-inference.
styleIdHouseStyleIdDefault sunprint — cyanotype is the right register for memory.

request

curl -s -X POST https://api.occestra.xyz/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": { "name": "oce_make_keepsake", "arguments": {
      "title": "Our first summer in Porto",
      "description": "We walked the bridge at dusk and ate too many pastries.",
      "tone": "nostalgic, quiet"
    } }
  }'

oce_write_toast — 0.10 USDT

A toast written for the room, not for the internet — the anti-slop filters hit copy hardest.

fieldtypenotes
subject *stringWho or what the toast is to.
relationshipstringYour relationship to the subject.
tonestring'funny but ends sincere'.
detailsstringThe specific memories only you could supply — this is what makes it yours.
lengthSecondsnumberSpoken length target.

request

curl -s -X POST https://api.occestra.xyz/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": { "name": "oce_write_toast", "arguments": {
      "subject": "Mara", "relationship": "my older sister",
      "tone": "funny, ends sincere",
      "details": "she taught me to drive, badly, in a borrowed Corolla"
    } }
  }'

oce_moodboard — 0.30 USDT

fieldtypenotes
subject *stringWhat the board is for.
styleIdHouseStyleIdThe versioned style system to direct it.
notesstringConstraints and references.

request

curl -s -X POST https://api.occestra.xyz/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": { "name": "oce_moodboard", "arguments": {
      "subject": "a rooftop birthday dinner at dusk", "styleId": "amethyst_editorial"
    } }
  }'

oce_launch_kit — 1.50 USDT

The LAUNCH studio: give it a URL and it reads your actual site in a headless browser — the colours a browser rendered, not a guess — extracts an honest brand genome, then produces a hero visual, announcement cards, a launch thread, a 90-second demo beat sheet and OG images. Fabricated prices, invented user counts, and placeholder copy are caught deterministically and rejected or repaired — never shipped as fill-in-the-blank text.

fieldtypenotes
productName *stringThe product.
urlstringLive URL. Without it the genome is description-only and the pack discloses that gap.
descriptionstringOne honest paragraph.
audiencestringWho this is for.
styleIdHouseStyleIdVisual system for the renders.
deliverablesLaunchKind[]Subset of the kit.

request

curl -s -X POST https://api.occestra.xyz/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": { "name": "oce_launch_kit", "arguments": {
      "productName": "YourProject", "url": "https://yourproject.xyz",
      "audience": "builders shipping this week"
    } }
  }'

oce_critique — 0.01 USDT · the wedge

Run your own artifact — text or image, ours or yours — through the Occestra Tribunal and get back the graded OQS report plus a concrete repair brief. One cent. This is the cheapest way any builder in the ecosystem can find out whether their output clears a published standard before their users do.

fieldtypenotes
kind *stringWhat the artifact is: 'launch_thread', 'invitation', 'plan'… — selects which deterministic checks apply.
brief *stringWhat the artifact was supposed to achieve. Grading is always against intent.
textstringThe artifact, if it is copy.
imageBase64stringThe artifact, if it is an image.
styleIdHouseStyleIdStyle to grade fidelity against, for images.
sizestringDeclared dimensions, for the DIM_ASPECT_MISMATCH check.

request

curl -s -X POST https://api.occestra.xyz/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": { "name": "oce_critique", "arguments": {
      "kind": "launch_thread",
      "brief": "announce a CLI tool to senior engineers without hype",
      "text": "Post 1: We are thrilled to announce our revolutionary…"
    } }
  }'

Response: the full TribunalReport — axes, deterministic results, issues, and repairBrief when it fails. That example fails; the report will tell you exactly why.

oce_verify_keepsake — free, forever

Verification is deliberately outside the paywall: trust that costs money is not trust.

fieldtypenotes
keepsakeId *stringAny Occestra keepsake id.

request

curl -s -X POST https://api.occestra.xyz/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": { "name": "oce_verify_keepsake", "arguments": { "keepsakeId": "oce_01kxbz33bb4grnd1xh0gev" } }
  }'

response

{
  "found": true,
  "keepsakeId": "oce_01kxbz33bb4grnd1xh0gev",
  "studio": "celebrate",
  "quality": { "oqsVersion": "1.2.0", "passRate": 1, "repairedCount": 0 },
  "seal": {
    "…": "the full seal fields, plus:",
    "leaf": "0xc814215758135400b364fbb5d4614b7e9ab50a114158a1c91e36064ab23a4adc",
    "signatureValid": true
  },
  "anchored": true,
  "anchorTx": "0xb97ec200c619fca5f589b07d65bb7aa1a31a404e50e8fe010e19abf0c4058801",
  "explorer": "https://www.oklink.com/x-layer/tx/0xb97ec2…",
  "publicPage": "https://api.occestra.xyz/k/oce_01kxbz33bb4grnd1xh0gev"
}

Or skip our servers entirely — the provenance page has a standalone script that performs both checks against the chain directly.

The SDK, and the drop-in quality gate

@occestra/client wraps all of the above with types and automatic x402 payment (your key signs locally; it is never sent):

five lines, whole integration

import { Occestra } from "@occestra/client";

const studio = new Occestra({ endpoint: "https://api.occestra.xyz",
  payment: { privateKey: process.env.AGENT_KEY } });
const toast = await studio.writeToast({ subject: "Mara", details: "she taught me to drive, badly" });
console.log(toast.publicPage); // graded, sealed, verifiable

And for any agent built on the Vercel AI SDK, examples/quality-gate.mjs in the repo is a drop-in middleware that runs every generation through oce_critique before your agent ships it — one repair round on failure, exactly like our own pipelines, for one cent a check:

quality-gate for any AI SDK model

import { wrapLanguageModel } from "ai";
import { occestraQualityGate } from "./quality-gate.mjs";

const model = wrapLanguageModel({
  model: yourModel, // any provider
  middleware: occestraQualityGate({
    endpoint: "https://api.occestra.xyz",
    payment: { privateKey: process.env.AGENT_KEY },
    kind: "launch_thread",
  }),
});
// generations that fail the published standard are repaired once with the
// Tribunal's brief; persistent failures ship WITH the report attached.