Documentation
REST API reference
56 public-read GET endpoints across 18 entity and framework groups. Each entity detail response carries an additive framework_metadata block alongside the structured record so verification posture, cap-flags, and within-cohort pair membership reach consumers without an extra request.
Base URL
Production: https://registry.deploy.report. Every endpoint below sits under that origin. Responses are JSON with UTF-8 encoding.
Authentication
The public-read GET surface documented on this page requires no authentication. The corresponding write surface (POST / PATCH / DELETE on the same paths) is gated by x-rover-secret for internal callers or Authorization: Bearer <token> for external registered consumers. Write surface is not part of this reference.
Response conventions
- framework_metadata block. Every entity detail response carries
verification_status,maturity_stage,lifecycle_state,architectural_position,within_cohort_verified_vs_claimed_pair,cap_flags, andverification_depth. Computed at query time from structured data and the framework typed-const. - JSON-LD inline. Entity detail responses include a
jsonLdfield with the schema.org Organization / Product / Event / etc. shape. The customdeploy:namespace (see /docs/jsonld) is the channel for verification posture and architectural classifications schema.org alone cannot express. - Honest absence. Missing data returns
nullor omits the field. Tools and endpoints never synthesize defaults. - Status codes.
404means the entity does not exist;500means an actual server error. The registry never conflates the two; downstream consumers can branch on status code reliably. - Append-only history. Trust-bearing tables (verifications, permissions, incident status events, regulation status events) ship through GET-only surfaces; corrections add new events rather than overwrite.
Changes feed & webhooks
The GET /v1/changes endpoint is a metered, replayable stream of material verified state transitions across companies, models, and deployments - the read half of the DEPLOY data product. It is also the replay endpoint: there is no separate replay API. Poll from the last id you acked with ?since= to recover any missed webhook deliveries.
- Versioned payload. Every response carries
v: 1. The contract is additive; new fields never remove or repurpose existing ones. - Evidence is mandatory. Each change carries an
evidencetuple -sourceUrl,span,tier,observedAt. A change with no evidence is never emitted; the feed is a claim-with-provenance stream. - Immutable + supersedes. Changes are never edited in place. A correction is a new change with
supersedesset to the id it replaces, so consumers can rebuild exact history from the ordered stream. - Point-in-time.
?as_of=<timestamp>returns only the changes DEPLOY had recorded at or before that instant (no lookahead): a change recorded later never appears in an earlier snapshot, even when it took effect earlier. Each change carries bothrecordedAt(when DEPLOY recorded it) andeffectiveAt(when it took effect in the world). - Time axis.
?since,?until, and?as_ofapply torecordedAtby default (axis=transaction). Pass?axis=validto apply them toeffectiveAtinstead; that view is not lookahead-safe. - Ordering. Oldest first on the chosen axis.
?sinceis the cursor: pass thenextSincefrom the previous page.
Webhook push (Terminal tier)
A webhook is a subscription with delivery_channel=webhook - the same spine that powers email alerts, one more channel. Each delivery is a signed POST of the change payload carrying these headers:
X-Deploy-Signature:sha256=<hex>- HMAC-SHA256 of the exact request body under your subscription secret.X-Deploy-Timestamp: send time; reject deliveries whose timestamp is stale to defend against replay.X-Deploy-Event: the event type (e.g.status_change).
Verify before trusting the body:
const sig = req.headers["x-deploy-signature"]; // "sha256=<hex>"
const expected = "sha256=" + crypto
.createHmac("sha256", WEBHOOK_SECRET)
.update(rawBody) // the exact bytes, BEFORE JSON.parse
.digest("hex");
if (!crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected)))
return res.status(401).end(); // rejectDelivery is at-least-once: the change id is the dedupe key, so a redelivery is safe to ignore. Failures retry with exponential backoff (5 attempts over ~6 hours) before the delivery is marked failed and surfaced on your dashboard. If you ever fall behind, replay with GET /v1/changes?since=<last acked id>.
Tiers
- Builder (free). The read feed and record endpoints, rate-limited, attribution required. Reading reality is free.
- Terminal (data tier). Webhook push,
?as_ofpoint-in-time, bulk export, commercial redistribution, and an SLA. Being pushed reality, replaying history, and redistributing it is the product. Contact for terms.
Two credential types, one account, never merged: OAuth grants (a user authorizes an assistant - the consumer / MCP lane) and API keys (a customer machine, metered - the data lane). They share a scope vocabulary (read:changes, read:entities) but not tables or middleware.
Endpoints
Companies
Companies (manufacturers, operators, brain developers, suppliers). Each entity detail response carries the framework_metadata block.
GET /v1/companies
List companies, newest first. Default page size is 100 (max 100). Pass `cursor` from the previous `nextCursor` to read the next page. Default rows omit large JSON and text columns. `fields=full` returns the whole row; `fields=id,name,sources` picks columns (id and createdAt are always included).
Query parameters
limit(integer, optional): Page size. Default 100. Must be from 1 to 100.cursor(string, optional): Opaque cursor from the previous response's nextCursor.fields(string, optional): Omit for the slim list (scalars except description, sources, keyFacts, aliases, reviewNote, factoryLocations, litigationEvents, marketCapSource). `full` for every column. Or a comma-separated field list.
Returns
`{ companies, limit, nextCursor }`. Default company objects keep id, name, slug, type, status, hq, founded, fundingTotal, website, roles, reviewStatus, lifecycleState, and the other short scalars, plus createdAt and updatedAt. nextCursor is null on the last page.
GET /v1/companies/{id}
Single company by UUID. Includes the company's schema.org JSON-LD and the additive framework_metadata block (verification_status, cap_flags, architectural_position, within_cohort pair membership, verification_depth).
Path parameters
id(uuid, optional): Company UUID.
Query parameters
include(string, optional): Comma-separated includes. `funding-rounds` eager-loads funding rounds with per-round investor participations inline. `people` eager-loads PersonCompany rows with Person identity. `founders` eager-loads PersonFounder rows. `board` eager-loads PersonBoard rows. `filings` eager-loads RegulatoryFiling rows where this company is the applicant. `partnerships` eager-loads Partnership rows involving this company (in any role). `acquisitions` eager-loads Acquisition rows where this company is acquirer or acquired_state.
Returns
Company record fields, `jsonLd` (schema.org Organization), `framework_metadata` block, plus optional `funding_rounds` / `people` / `founders` / `board` / `filings` / `partnerships` / `acquisitions` arrays when the corresponding include is requested.
GET /v1/companies/{id}/funding-rounds
List funding rounds for a company, ordered by announcedAt desc.
Path parameters
id(uuid, optional): Company UUID.
Returns
`{ companyId, companySlug, funding_rounds: [...] }`. Each round carries roundName, announcedAt, amountUsd, postMoneyValuationUsd, amountBasis (exact / reported / undisclosed), sources, reviewStatus.
Models
Robot models (physical machines). form_factor describes the regulatory regime, not the use case.
GET /v1/models
List models. Combine filters; companyId + formFactor + caps tokens AND together.
Query parameters
companyId(uuid, optional): Narrow by company.formFactor(string, optional): Narrow by form factor (humanoid / aerial / av / truck / sidewalk / wearable / biometric / maritime / surgical / construction / amr / agriculture). Accepted as `formFactor` or `form_factor`.caps(string (repeatable), optional): Capability filter tokens. Presence: `climbs_stairs`. Quantitative min/max/eq: `payload_kg:gte:10`, `range_km:lte:15`, `payload_kg:eq:35`. Multiple tokens AND together.
Returns
Array of model records under `models`. When `caps` is used, response also includes the parsed `filters`.
GET /v1/models/{id}
Single model by UUID. Includes schema.org JSON-LD and framework_metadata.
Path parameters
id(uuid, optional): Model UUID.
Query parameters
include(string, optional): Comma-separated includes. `filings` eager-loads RegulatoryFiling rows covering this model via the ModelRegulatoryFiling junction.
Returns
Model record, `jsonLd` (schema.org Product), `framework_metadata` block, optional `methodology` block, optional `filings` array when `include=filings`.
GET /v1/models/{id}/capabilities
Effective capability set for a model (model-level merged with active version).
Path parameters
id(uuid, optional): Model UUID.
Returns
Array of capability records with type, key, value, source.
GET /v1/models/{id}/versions
List model versions ordered by version effective date.
Path parameters
id(uuid, optional): Model UUID.
Returns
Array of version records with version label, effectiveAt, supersededAt, sources.
GET /v1/models/{id}/versions/{versionId}
Single model version detail.
Path parameters
id(uuid, optional): Model UUID.versionId(uuid, optional): Version UUID.
Returns
Version record with version-level overrides and source attribution.
GET /v1/models/{id}/versions/{versionId}/capabilities
Capabilities scoped to a single model version.
Path parameters
id(uuid, optional): Model UUID.versionId(uuid, optional): Version UUID.
Returns
Array of version-scoped capability records.
Brains
Software stacks that drive robot models (foundation models, AV driver stacks, surgical planners).
GET /v1/brains/{id}
Single brain by UUID. Includes schema.org JSON-LD and framework_metadata.
Path parameters
id(uuid, optional): Brain UUID.
Returns
Brain record (slug, name, kind, providerArchitecture, openness, maturityStage), `jsonLd`, `framework_metadata`.
Deployments (Robots)
Verified named-site deployment records. `/v1/robots/*` is the legacy alias for the Deployment entity surface; the canonical entity name is Deployment.
GET /v1/robots
List deployments. Limit by query params.
Query parameters
modelId(uuid, optional): Narrow by model.operatorId(uuid, optional): Narrow by operator company.locationId(uuid, optional): Narrow by location.
Returns
Array of deployment records.
GET /v1/robots/{id}
Single deployment by UUID. Embeds model + owner + derived trust tier + derived current posture; includes schema.org JSON-LD and framework_metadata.
Path parameters
id(uuid, optional): Deployment UUID.
Returns
Deployment record with embedded model/operator/location, `derived: { trustTier, currentPosture }`, `jsonLd`, `framework_metadata`, optional `methodology`.
GET /v1/robots/{id}/permissions
Permission events on a deployment (append-only history).
Path parameters
id(uuid, optional): Deployment UUID.
Returns
Array of permission event records ordered by effectiveAt.
GET /v1/robots/{id}/verifications
Per-claim VerificationEvent history (append-only). Strongest per-claim verification surface in the registry.
Path parameters
id(uuid, optional): Deployment UUID.
Returns
Array of verification events with method, evidence, claim payload, recordedAt.
Locations
Geographic entities (cities, counties, states, nations, sites). Each carries multi-resolution hierarchy.
GET /v1/locations
List locations.
Returns
Array of location records.
GET /v1/locations/{id}
Single location by UUID. Includes schema.org JSON-LD and framework_metadata.
Path parameters
id(uuid, optional): Location UUID.
Returns
Location record, `jsonLd`, `framework_metadata`, optional `methodology`.
Incidents
Append-only incident records. Status events live alongside; current state derived from the event log. Retracted incidents are suppressed from aggregates but their canonical URL stays index/follow.
GET /v1/incidents
List incidents.
Returns
Array of incident records.
GET /v1/incidents/{id}
Single incident with derived status, sources, responses, status events, schema.org JSON-LD, and framework_metadata.
Path parameters
id(uuid, optional): Incident UUID.
Returns
Incident record with `derived: { status }`, `sources`, `responses`, `statusEvents`, `jsonLd`, `framework_metadata`, optional `methodology`.
GET /v1/incidents/{id}/sources
Sources for an incident, append-only.
Path parameters
id(uuid, optional): Incident UUID.
Returns
Array of source records (url, label, publishedAt, addedAt).
GET /v1/incidents/{id}/status
Status events for an incident, append-only event log.
Path parameters
id(uuid, optional): Incident UUID.
Returns
Array of IncidentStatusEvent records ordered by effectiveAt; statuses include open, corrected, retracted, disputed, closed.
GET /v1/incidents/{id}/responses
Operator and counterparty responses to an incident.
Path parameters
id(uuid, optional): Incident UUID.
Returns
Array of response records with responder, response text, recordedAt.
Regulations
Regulatory records linked locationally (Location + form_factor). Superseded or repealed regulations stay index/follow but are suppressed from aggregates (the retracted/superseded asymmetry).
GET /v1/regulations
List regulations.
Returns
Array of regulation records.
GET /v1/regulations/{id}
Single regulation with derived status, sources, status events, schema.org JSON-LD, and framework_metadata.
Path parameters
id(uuid, optional): Regulation UUID.
Returns
Regulation record with `derived: { status }`, `sources`, `statusEvents`, `jsonLd`, `framework_metadata`, optional `methodology`.
GET /v1/regulations/{id}/sources
Sources for a regulation, append-only.
Path parameters
id(uuid, optional): Regulation UUID.
Returns
Array of source records.
GET /v1/regulations/{id}/status
Status events for a regulation.
Path parameters
id(uuid, optional): Regulation UUID.
Returns
Array of RegulationStatusEvent records; statuses include active, superseded, repealed.
People graph
Founders, executives, researchers, and board members. People-graph entities (Person + PersonCompany + PersonFounder + PersonBoard + PersonInvestorRole + PersonEducation) shipped in migration 20260604140000_add_people_graph; read-only on /v1/.
GET /v1/people/{slugOrId}
Single Person with the canonical relation graph eager-loaded (current and prior company roles, foundings with cofounder status, board seats, investor partner roles, educations).
Path parameters
slugOrId(string, optional): Person slug (preferred) or UUID.
Returns
Person record + companyRoles + boardRoles + investorRoles + foundings + educations.
GET /v1/people/{slugOrId}/companies
Cross-company history for a person ('diaspora' / talent-flow view). PersonCompany rows ordered current-first.
Path parameters
slugOrId(string, optional): Person slug or UUID.
Returns
`{ personId, personSlug, companies: [...] }` with role + role_basis per row.
GET /v1/companies/{id}/people
All people at a company across PersonCompany edges (current + historical).
Path parameters
id(uuid, optional): Company UUID.
Returns
`{ companyId, companySlug, people: [...] }`. Each row carries Person identity + role + role_title + role_basis + currentRole flag.
Regulatory filing index
Company- and model-anchored device/product clearance filings (510(k), De Novo, recalls, CE Mark, NMPA, NHTSA, FAA, FCC, DIU Blue UAS, ITC). Distinct from the location-anchored /v1/regulations surface. Cross-jurisdictional discipline keeps the regimes structurally separate.
GET /v1/filings/{lookup}
Single RegulatoryFiling. Accepts slug, UUID, or filing number (K240929 / DEN180044 / 23V-838 style).
Path parameters
lookup(string, optional): Filing slug, UUID, or filing number.
Returns
Filing record + applicantCompany + linked models. clearance_scope carries the exact cleared indication so consumers branch honestly on status.
GET /v1/companies/{id}/filings
All RegulatoryFilings where this company is the applicant.
Path parameters
id(uuid, optional): Company UUID.
Returns
`{ companyId, companySlug, filings: [...] }` ordered filingDate desc.
GET /v1/models/{id}/filings
All RegulatoryFilings covering this model via the ModelRegulatoryFiling junction.
Path parameters
id(uuid, optional): Model UUID.
Returns
`{ modelId, modelSlug, filings: [...] }`.
Partnership graph
Collaboration between independent companies (distinct from the acquisition graph = ownership/absorption). Status (announced / active / concluded / dissolved / superseded) + verificationPosture surface the verified-vs-claimed boundary at the partnership lifecycle layer; press-release MOUs stay legible as such until status flips to active with verificationPosture=verified.
GET /v1/partnerships/{lookup}
Single Partnership by slug or UUID, with PartnershipParty rows inline.
Path parameters
lookup(string, optional): Partnership slug or UUID.
Returns
Partnership record + parties[] with per-party Company identity + role.
GET /v1/companies/{id}/partnerships
Partnerships involving this company (in any role). Ordered status asc then announcedDate desc.
Path parameters
id(uuid, optional): Company UUID.
Returns
`{ companyId, companySlug, partnerships: [...] }`.
Acquisition history graph
Ownership / absorption events. Status (announced / pending / completed / terminated) + structure (full_acquisition / acqui_hire / license_and_hire / merger / etc.) + valuationBasis (exact / reported / undisclosed / contingent) surface the verified-vs-claimed boundary at the M&A layer.
GET /v1/acquisitions/{lookup}
Single Acquisition by slug or UUID with acquirer + acquired (FK or off-registry name fallback) + AcquiredAsset rows inline.
Path parameters
lookup(string, optional): Acquisition slug or UUID.
Returns
Acquisition record + acquired-asset rows with optional relatedModel link.
GET /v1/companies/{id}/acquisitions
Acquisitions involving this company in either direction (as acquirer or as acquired party).
Path parameters
id(uuid, optional): Company UUID.
Returns
`{ companyId, companySlug, acquisitions: [...] }`.
Investors and funding
Investor graph entities (Investor + FundingRound + InvestorParticipation). Read-only on /v1/; editorial backfill populates the corpus.
GET /v1/investors/{slugOrId}
Single investor. Accepts slug or UUID. Includes parentCompany link for corporate venture arms.
Path parameters
slugOrId(string, optional): Investor slug (preferred) or UUID.
Returns
Investor record with slug, name, kind (venture / growth / strategic_corporate / sovereign_wealth / angel / accelerator / government / other), aliases, sources, parentCompany link.
GET /v1/funding-rounds/{id}
Single funding round detail with company link. Add `?include=investors` to eager-load InvestorParticipation rows with per-investor identity.
Path parameters
id(uuid, optional): FundingRound UUID.
Query parameters
include(string, optional): `investors` eager-loads InvestorParticipation rows inline.
Returns
FundingRound record (roundName, announcedAt, amountUsd, postMoneyValuationUsd, amountBasis, sources), optional `participations` array.
Owners
Owner entity records (operators distinct from manufacturers; the operator <-> deployment surface).
GET /v1/owners
List owners.
Returns
Array of owner records.
GET /v1/owners/{id}
Single owner detail.
Path parameters
id(uuid, optional): Owner UUID.
Returns
Owner record with linked company (when set).
Entities (cross-type)
Cross-type entity surface for tooling. Resolves any entity type by canonical UUID; useful for agents that received a UUID without entity-type context.
GET /v1/entities
Search entities by name/slug across all entity types. Useful for autocomplete or disambiguation.
Query parameters
q(string, required): Search query.entityType(string, optional): Optional scope to a single entity type (company / model / brain / etc.).
Returns
Array of matched entities with type, id, canonicalName, slug.
GET /v1/entities/{id}
Resolve any entity by UUID. Returns the entity record and its type.
Path parameters
id(uuid, optional): Entity UUID.
Returns
`{ type, entity: {...} }`.
GET /v1/entities/{id}/deployments
Deployments related to an entity (operator OR maker OR location OR model, per entity type).
Path parameters
id(uuid, optional): Entity UUID.
Returns
Array of related deployment records.
GET /v1/entities/{id}/sources
Sources for any entity.
Path parameters
id(uuid, optional): Entity UUID.
Returns
Array of source records.
GET /v1/entities/{id}/stats
Aggregate stats for an entity (counts, latest activity).
Path parameters
id(uuid, optional): Entity UUID.
Returns
Stat object with counts of related entities and last-touched date.
Framework surfaces (slug-keyed)
Slug-keyed reads of the framework typed-const SSoT. Slug resolves across all seven entity types; honest-absence returns null when no classification exists.
GET /v1/methodology/{slug}
Verification methodology metadata for a DEPLOY entity by slug. Same surface as v2.get_methodology MCP tool.
Path parameters
slug(string, optional): Entity slug.
Returns
Methodology block (verification_posture, confidence_tier, source_tier_breakdown, last_reviewed, re_verify_trigger, cap_flags, architectural_position, within_cohort_verified_vs_claimed_pair) plus entity identity.
GET /v1/sagas/{entity_slug}
Within-entity sagas + feature references for an entity (SAME-entity feature-scope verification posture variance over time / across regions).
Path parameters
entity_slug(string, optional): DEPLOY entity slug.
Returns
`{ entity_slug, sagas: [...], featureReferences: [...] }`. Empty arrays when entity has no registered sagas / feature refs (honest absence).
GET /v1/taxonomies/autonomy-boundary
The four-tier autonomy-boundary taxonomy (autonomous-execution / ai-augmented-operator-controlled / replacement-robotics-teleoperated / assistive-co-pilot) with per-tier definitions, verification criteria, drift patterns, cohort applicability, editorial reference, canonical examples.
Returns
Taxonomy block with framework_schema_version, taxonomy slug, count, tiers array.
GET /v1/taxonomies/brain-provider-architecture
The four-tier brain-provider-architecture taxonomy (captive-vertically-integrated / third-party-foundation-model / hybrid-licensed / research-only).
Returns
Taxonomy block with per-tier definitions and canonical examples.
GET /v1/taxonomies/source-quality
The source-quality tier rubric (primary-sec-filing, primary-fda-database, primary-regulatory-filing, primary-government-record, primary-company-ir, primary-academic-peer-reviewed, ..., secondary-established-publication, secondary-industry-publication, secondary-trade-publication, knowledge-base, code-repository, model-repository, preprint, aggregator, unclassified) plus the sourceName-aware classifier convention.
Returns
Taxonomy block with tier list (slug, label, description, rollup_category) and source_name_convention block.
Corrections journal
Append-only corrections log sourced from IncidentStatusEvent and RegulationStatusEvent rows. Same data as the /corrections HTML surface and v2.list_corrections MCP tool.
GET /v1/corrections
Public corrections journal.
Query parameters
since_date(string (ISO date), optional): Filter to corrections with effectiveAt >= this date.entity_slug(string, optional): Filter to a specific incident or regulation slug.limit(number, optional): Max results (default 100, max 500).
Returns
Array of correction entries with date, record_type, record_headline, record_url, status, reason, source_of_correction.
Auxiliary surfaces
Indexability inspection, capability vocabulary, economics aggregates, feed configuration, and webhook registry.
GET /v1/indexability
Live counts of which entities qualify for the SEO indexing gate per entity type. Useful for inspecting the indexing-decoupled-from-API surface.
Returns
Object with per-entity-type pass / hold-back counts.
GET /v1/capabilities
The capability vocabulary (capability keys + value types + descriptions).
Returns
Array of capability definitions.
GET /v1/economics
Aggregate economic indicators across the registry.
Returns
Object with aggregate counts and economic signals.
GET /v1/feeds
Feed registry (per-entity RSS + firehose configuration).
Returns
Array of feed records.
GET /v1/webhooks
Webhook registry (auth-gated).
Returns
Array of webhook records.
Changes feed
The verified change feed - a metered, replayable stream of material verified state transitions across companies, models, and deployments. The read half of the DEPLOY data product; webhook push is the Terminal tier (see the Changes feed & webhooks section above).
GET /v1/changes
Verified change feed. Unions material + verified transitions from the *_events projections into one monotonic stream. Also the replay endpoint: poll from the last acked id with ?since to recover missed webhook deliveries (there is no separate replay API). Metered like /v1/signals.
Query parameters
since(ISO 8601 timestamp, optional): Return changes after this instant (exclusive). The replay cursor: pass the nextSince from the previous page. Applies to recordedAt by default (see axis).until(ISO 8601 timestamp, optional): Return changes up to this instant (inclusive). Applies to recordedAt by default (see axis).as_of(ISO 8601 timestamp, optional): Point-in-time: returns only changes DEPLOY had recorded at or before this instant (recordedAt <= as_of), even when a later-recorded change has an earlier effectiveAt. Backtest-safe, no lookahead. Takes precedence over until.axis(string, optional): Time axis for since, until, and as_of. transaction (default): recordedAt, when DEPLOY recorded the change; no lookahead. valid: effectiveAt, when the change took effect in the world; not lookahead-safe, because a change recorded later can carry an earlier effectiveAt.kinds(string, optional): Comma-separated entity kinds to include (company, model, deployment). Default: all.limit(int, optional): Max rows (default 100, cap 500).
Returns
`{ count, axis, changes: [...], nextSince }`. Each change carries v, id, kind, entity, field, oldValue, newValue, effectiveAt (when it took effect), recordedAt (when DEPLOY recorded it), evidence:{sourceUrl, span, tier, observedAt} (observedAt = recordedAt), and supersedes (id of the corrected change, or null). Immutable: corrections are new events with supersedes set, never in-place edits.
See also
- /docs: the API documentation landing.
- /docs/mcp: MCP tool catalog (20 tools across V1 retrieval and V2 framework analysis).
- /docs/jsonld: JSON-LD
deploy:namespace vocabulary.