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 exactly what the feed had published as of that instant (no lookahead) - a backtest gets the same bytes a subscriber received live. - Ordering. Monotonic ids, no guarantee beyond that.
?sinceis the cursor.
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. Returns up to 100 records ordered by createdAt desc.
Returns
Array of company records under `companies`. Each record carries id, slug, name, type, hq, founded, fundingTotal, sources, reviewStatus, createdAt, updatedAt.
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(id, optional): Return changes after this feed id (exclusive). The replay cursor - pass the last id you acked.until(id, optional): Return changes up to this feed id (inclusive).as_of(ISO 8601 timestamp, optional): Point-in-time: returns exactly what the feed had published as of this instant (effectiveAt <= as_of). Backtest-safe, no lookahead.kinds(string, optional): Comma-separated entity kinds to include (company, model, deployment). Default: all.limit(int, optional): Max rows (default 100, cap 500).
Returns
`{ v: 1, changes: [...] }`. Each change carries id, kind, entityType, entityId, field, oldValue, newValue, effectiveAt, evidence:{sourceUrl, span, tier, observedAt}, 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.