A SPAT turns a real object into an EMO — an Executable Media Object. A phone camera recognizes it and fires a clickable experience, and every scan settles to a royalty ledger. Two ways in: the /try playground, or the API. Base URL https://spatemo.com.
Tip: on iPhone, add /try to the Home Screen (Share → Add to Home Screen) — it launches full-screen with no browser chrome, which the camera capture wants.
MobileNet embeddings + a KNN classifier, trained in-browser from your object + background passes. Fires when the frame is clearly more like your object than its background.
Feature-point image tracking. Compiles a .mind target from the artwork and locks onto the printed pattern with full pose — the one path that can trace the real edges.
Recognition runs 100% on the device. A confident match calls back to settle the ledger and return the experience overlay.
1 · Get a sandbox key (idempotent per email)
curl -X POST https://spatemo.com/v1/keys \
-H "Content-Type: application/json" \
-d '{"email":"you@company.com"}'
# → { "apiKey": "spat_sandbox_…", "id": "…", "tier": "sandbox" }
2 · Register an EMO
curl -X POST https://spatemo.com/v1/emo \
-H "Authorization: Bearer $SPAT_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"World Cup Poster","type":"object","mode":"sandbox",
"geo":"us","experience":"shop","url":"https://store.fifa.com/…"}'
# → { "emo_id": "emo_…", "share": "https://<slug>.spatemo.com",
# "experience": "https://spatemo.com/e/emo_…", // the camera link
# "embed": "<script …>", "ledgerUrl": "https://spatemo.com/ledger/view?t=…" }
The API creates the EMO; the recognizer is attached separately — POST /emos/:id/knn (a KNN dataset for 3D) or POST /emos/:id/target (a compiled .mind for flat). The /try trainer produces both for you in the browser.
| Method | Path | What it does |
|---|---|---|
| POST | /v1/keys | Mint a sandbox key (idempotent per email) |
| POST | /v1/emo | Register an EMO |
| GET | /emos | List your EMOs |
| GET | /emos/:id | Fetch one EMO |
| PATCH | /emos/:id | Swap the experience in place — live on the next scan, no re-register |
| DELETE | /emos/:id | Delete an EMO |
| POST | /emos/:id/knn | Attach a 3D recognizer (KNN dataset) |
| POST | /emos/:id/target | Attach a flat recognizer (compiled .mind) |
All of the above take Authorization: Bearer <key>. The camera pages handle recognition and settlement themselves (/emos/:id/detected, /cta-click) with a short-lived recognition token — you don't call those directly.
hello, shop (checkout), follow (social), unlock (reveal a code). Swappable with PATCH.<slug>.spatemo.com or /e/:id — the isolated camera page for one EMO. Send it like a photo.ledgerUrl, or the emailed link after the first scan.spat_sandbox_) create sandbox EMOs — instant, no approval. Live mode requires an approved account.https://spatemo.com · playground at /try. Recognition is on-device (TensorFlow.js + MindAR); the API is plain REST — a key and a curl.