Unlock every Legal entity a search matched
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.
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.
Authorization
bearerAuth In: header
Path Parameters
The search receipt's id, as searchResultId.
uuidHeader 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
application/json
application/json
curl -X POST "https://example.com/api/v1/search/497f6eca-6276-4993-bfeb-53cbbbba6f08/unlock" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "searchId": "6b1f0d4e-9d3a-4d7c-8f2b-5a0e7c1d4f88", "maxCredits": 500, "dryRun": true }'{ "searchResultId": "3b7221ed-6267-4ca7-8be3-1d1caa90ff7e", "dryRun": true, "count": 0, "matched": 0, "mint": 0, "held": 0, "unlock": 0, "alreadyUnlocked": 0, "conflicts": 0, "incomplete": 0, "quote": 0, "charged": 0, "balance": -9007199254740991}Record what you observed about a Company or concluded about a Segment POST
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.
Search the Commons: count, analytics, and a minted sample POST
Runs a filter AST against the live Commons and answers with the population's count, its full analytics, and a sample of matching Legal entities minted as Companies of this organization — verified and unlocked from birth, with Core pre-filled from the registry. The charge is `max(5, newly unlocked)`: the floor pays for the count and analytics, and every Legal entity this organization has not unlocked before costs one credit, once, forever. A Company it already holds is unlocked in place rather than duplicated. An identical request replayed inside the receipt's window returns the original sample for nothing. The quote is the worst case, `max(5, sampleSize)`, computed before anything is read or written; the call is refused whole when it exceeds `maxCredits` or the key's bounds, and the charge never exceeds it. `dryRun` returns the quote without reading the Commons, minting, unlocking, or charging. Unlock the whole population with `POST /api/v1/search/{searchId}/unlock`. Variable price, quoted per request: up to 100 credits per call. Charged max(5, newly unlocked Legal entities); an active receipt replays for 0.