Implement /federation/identify on your side. We'll resolve your hashes too.
Federation makes Cambridge TCG portable. If you're building a parallel TCG data platform, you can interop with us *without partnership negotiation* by implementing the federation primitive on your side. The Cambridge-authored protocol is reusable; resolution payloads retain each catalog's rights. Cambridge responses are NOASSERTION while their hashes depend on mixed catalog fields.
When Cambridge TCG (or any federation partner) sends you a sha256 content_hash, your endpoint walks your catalog computing each row's hash until it finds the match — then returns the resolution. The shape mirrors ours: `{ matched: true, sku: ..., universal_url: ... }` or `{ matched: false, scope: { rows_scanned, bound_reached } }`.
What to do with it
Reference implementation: apps/storefront/src/app/api/v1/federation/identify/[hash]/route.ts in our source mirror. Reuse the Cambridge-authored resolver shape, then declare the aggregate rights of your own catalog response instead of copying Cambridge's NOASSERTION boundary blindly.
POST a registration to /api/v1/feedback with `kind: federation-adopter` and your platform's URL + the federation endpoint URL. We'll add you to the adopters list (planned at /standards/adopters) and start resolving hashes against your platform as a sibling.
Run this
curl -X POST https://cambridgetcg.com/api/v1/feedback \
-H 'content-type: application/json' \
-d '{
"kind": "federation-adopter",
"platform_name": "My TCG Platform",
"platform_url": "https://my-tcg.example",
"federation_endpoint": "https://my-tcg.example/api/v1/federation/identify/{hash}",
"reporter_contact": "admin@my-tcg.example"
}'What to do with it
We'll reply with confirmation + a smoke-test call we'll run against your endpoint. Once it returns a sane response, you're registered.
Current content hashes use structural identity fields with price and capture-date inputs fixed to null. `/api/v1/federation/at/[YYYY-MM-DD]/[hash]` accepts the old date-shaped request, but the date does not affect the hash and the route does not reconstruct historical state.
Run this
curl https://cambridgetcg.com/api/v1/federation/at/2026-03-15/sha256:...
What to do with it
Use the ordinary identify route for current structural hashes and the SKU for strict identity. Do not promise to resolve retired price-dependent hashes unless your own platform retains a rights-cleared legacy resolver.
The federation primitive resolves hashes to SKUs. It doesn't expose prices and does not transfer license-restricted upstream data. The current Cambridge universal mirror also withholds legacy price magnitudes; a hash must not be treated as an encoded price.
Our implementation walks at most 5000 catalog rows before giving up (declares `scope.bound_reached: true`). Your implementation can have different bounds. Substrate-honest: declare your bound; don't return false negatives silently.
Next guide
Establish rights, document the source, then implement a bounded module.