Record what you observed about a Company or concluded about a Segment
Appends up to 200 observations about one subject: a Company with `companyId`, or a Segment with `segmentId` when the conclusion is about the set rather than about any one member. Exactly one of the two — a Fact about both is a caller that has not decided what it observed. Every field must be declared first and every value is validated against its declared type, so a number field cannot receive "about 5M". A field you looked at and found nothing for is recorded with `absent: true` — knowledge, not a gap, and coverage reports it as checked rather than missing. Facts are appended and never edited: the newest observation becomes the current value, an older observation arriving late does not displace a newer one, and `pin: true` fixes one observation as current until `pin: false` releases it. Set `observedAt` when you learned something about an earlier moment. A conclusion about a Segment cites the Jobs it was reduced from with `{ kind: "job", jobId }` evidence. Native namespaces are refused: a Fact in one is a Spore run's receipt. Free.
Appends up to 200 observations about one subject: a Company with companyId, or a Segment with segmentId when the conclusion is about the set rather than about any one member. Exactly one of the two — a Fact about both is a caller that has not decided what it observed. Every field must be declared first and every value is validated against its declared type, so a number field cannot receive "about 5M". A field you looked at and found nothing for is recorded with absent: true — knowledge, not a gap, and coverage reports it as checked rather than missing. Facts are appended and never edited: the newest observation becomes the current value, an older observation arriving late does not displace a newer one, and pin: true fixes one observation as current until pin: false releases it. Set observedAt when you learned something about an earlier moment. A conclusion about a Segment cites the Jobs it was reduced from with { kind: "job", jobId } evidence. Native namespaces are refused: a Fact in one is a Spore run's receipt.
Free.
Authorization
bearerAuth In: header
Header Parameters
Required for writes. Reusing this key with the same input replays the original response.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/v1/record" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "companyId": "7f9c2a14-3b6e-4d51-9a2f-1c8e5b0d47a3", "fields": [ { "field": "icp.score", "value": 8, "evidence": [ { "kind": "url", "url": "https://example.com/pricing", "excerpt": "Enterprise plans start at 50 seats." } ] } ] }'{ "companyId": "7f9c2a14-3b6e-4d51-9a2f-1c8e5b0d47a3", "segmentId": null, "recorded": 1, "items": [ { "field": "icp.score", "factId": "1d0f5b2c-9a37-4e61-8b25-7c3d4a1e6f80", "current": true, "pinned": false } ]}Read your Catalog GET
Returns every namespace this organization can record into: its own declarations, and the native ones the Spore tools own. A field marked `frozen` has Facts standing on it, so its type, unit, dimension, and promotion are fixed. The Catalog is private to the organization and never shared-cached. Free.
Unlock every Legal entity a search matched POST
Mints every Legal entity the receipt's filter matches as a Company of this organization and unlocks it, at one credit per entity not unlocked before. The quote is computed from the live population before anything is written; the call is refused whole — never partly applied — when it exceeds `maxCredits`, the plan's Company allowance, or the balance, and `dryRun` returns the same quote without minting, unlocking, or charging. Two kinds of match are left alone and never charged, and both are counted in the response: `conflicts`, where an identifier of the entity belongs to a Company that already names a different Legal entity (a merge, not an unlock), and `incomplete`, where the registry record cannot make a Company's Core. A population above 50,000 entities is refused: narrow the filter and search again. The Companies it creates are listed through `GET /api/v1/companies`. Variable price, quoted per request. 1 credit per Legal entity not yet unlocked, once, forever. Already-unlocked entities are free.