# Entity Bind / Resolvd MCP guide Connect an authorized agent to the same company-resolution services used by REST. This guide and the [generated tool catalogue](/api/mcp/tools.json) are anonymous, free reads. Reading documentation does not activate an evaluation or execute tools. [API quickstart](/api/quickstart.txt) · [Errors, retries and long tasks](/api/operations) · [OpenAPI](/api/openapi.json) · [Dated examples](/api/demo) · [Offer](/api/pricing) ## Connect a remote client Use **Streamable HTTP** and the exact HTTPS MCP URL supplied by your operator. The supported deployment routes API and MCP paths under one public origin. The settings currently advertise: ```json { "api_origin": "https://app.entitybind.com", "mcp_url": "https://app.entitybind.com/mcp", "mcp_transport": "streamable-http", "protocol_version": "2025-11-25", "configuration_required": false, "note": "Configured URLs are connection settings, not proof of public deployment." } ``` A null URL means the operator has not configured it; do not guess a hostname. Configured URLs are not a claim that a deployment has been externally verified. Replace the two placeholders below with your URL and issued credential. Client configuration formats differ; this example is for clients accepting `mcpServers`, `type`, `url` and `headers`. Prefer the client's credential vault when available. ```json { "mcpServers": { "resolvd": { "type": "http", "url": "https://app.entitybind.com/mcp", "headers": { "Authorization": "Bearer " } } } } ``` Send the bearer credential on every request. Keep it out of prompts, URLs and committed configuration. API keys and authorized OAuth access tokens use the same `Authorization: Bearer` header. Your account administrator grants access; an agent cannot self-assert a verified organization or create its own trial. The [1,000-credit evaluation](/api/pricing) remains planned behind launch gates. For a shell connectivity check, set `RESOLVD_MCP_URL` and `RESOLVD_API_KEY` in your secret environment. These initialization/catalogue requests do not execute company resolution. An SDK client should perform its normal MCP handshake. ```bash : "${RESOLVD_MCP_URL:?Set the MCP URL supplied by your operator}" : "${RESOLVD_API_KEY:?Set your issued bearer credential}" curl --fail-with-body "$RESOLVD_MCP_URL" \ -H "Authorization: Bearer $RESOLVD_API_KEY" \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ --data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"company-evaluator","version":"1.0"}}}' curl --fail-with-body "$RESOLVD_MCP_URL" \ -H "Authorization: Bearer $RESOLVD_API_KEY" \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -H 'MCP-Protocol-Version: 2025-11-25' \ --data '{"jsonrpc":"2.0","method":"notifications/initialized"}' curl --fail-with-body "$RESOLVD_MCP_URL" \ -H "Authorization: Bearer $RESOLVD_API_KEY" \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -H 'MCP-Protocol-Version: 2025-11-25' \ --data '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' ``` The transport is stateless: it issues no session credential. Responses may use JSON or SSE framing; an SSE transport frame does not itself mean a resolution is producing incremental progress. For durable batch progress, see [long-running operations](/api/operations). ## Credentials and permission checks Use the least privilege accepted by the operation. REST publishes `x-accepted-key-scopes` in [OpenAPI](/api/openapi.json); MCP exposes its current accepted alternatives in `_meta.resolvd.accepted_scopes` in the catalogue below. A permission error is not a reason to retry the same credential. Ask the owner for the appropriate scope. `read` allows stored tenant/reference reads; `resolve` also allows resolution. `review` allows review reads and verdicts. `erase` allows REST erasure, and does not authorize resolution. Administrative and operator keys are separate. OAuth grants support `read` and `resolve`; review and erasure require API keys. Existing OAuth grants lacking the resource audience must be reauthorized after the audience migration; API keys are unaffected. For OAuth, follow the protected-resource metadata named in the server's bearer challenge and its authorization-server metadata. Do not derive OAuth endpoints from a guessed API hostname. Connector registration and owner authorization are required; dynamic client registration is not promised. Static bearer remains available to clients that can store an issued key. The API and MCP listener expose `/.well-known/oauth-protected-resource` and `/.well-known/oauth-protected-resource{mcp_path}`. Its `resource` is the audience to include in authorization, token and refresh requests. A token for this resource works across this deployment's REST and MCP surfaces, subject to scope. The authorization server publishes `/.well-known/oauth-authorization-server`. The flow requires authorization code, PKCE `S256`, `state`, and an exact registered redirect URI. Refresh tokens rotate; OAuth errors use the OAuth string `error` contract. An operator registers the connector's actual callback URL: ```bash : "${RESOLVD_CONNECTOR_CALLBACK:?Set the client's exact callback URL}" uv run python -m resolvd.maintenance register-oauth-client \ --name 'Company research connector' --redirect-uri "$RESOLVD_CONNECTOR_CALLBACK" ``` A tenant administrator then issues a single-use install ticket. Substitute an existing tenant ID and keep the returned ticket private: ```bash : "${RESOLVD_API_ORIGIN:?Set the operator's API origin}" : "${RESOLVD_ADMIN_KEY:?Set the administrator credential}" curl --fail-with-body "$RESOLVD_API_ORIGIN/v1/admin/oauth/install-tickets" \ -H "Authorization: Bearer $RESOLVD_ADMIN_KEY" \ -H 'Content-Type: application/json' \ --data '{"tenant_id":""}' ``` The owner connects through the client and enters that ticket on the consent page. Tenant identity comes from the ticket, never an agent-provided tenant parameter. This requires an owner action; discovery is not automatic account provisioning. ## First authorized calls Read `get_enrichment_fields` for actual field suppliers, readiness and licences. Read `get_evaluation` and `get_usage` for grant status and balances. These are authenticated reads, not claims that every requested field is available. For resolution, send `tools/call` with a name and arguments matching that tool's published input schema. Unknown arguments are rejected. This example performs computation and may consume credits: ```json { "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "resolve_company", "arguments": { "name": "INSTITUTE OF PATENTEES & INVENTORS", "country": "GB", "registration_number": "00170887", "jurisdiction": "GB", "depth": "research", "idempotency_key": "own-company-evaluation-1" } } } ``` `context` accepts a company description or location clue; `address.postal_code` is the structured postcode field. A registration number needs its issuing jurisdiction. Country, name or domain alone is not independent identity truth. ## Choose company fields and explain gaps `get_enrichment_fields` also returns named `field_packs`: `identity`, `firmographics`, `financials` and `ownership`. Each field describes its value shape, cardinality, units and dimensions where known; stricter `source_value_schemas` apply only to the named supplier. Connector support does not establish that a particular company has a value. `resolve_company`, `get_entity` and `get_entity_intelligence` accept `fields` and `field_packs`. These limit returned entity attributes and their provenance. They do not change identity evidence, source acquisition or charges. Omitting both preserves the complete authorized view; an explicit empty selection returns no entity fields. Names are exact, with no wildcard expansion. At most 64 explicit fields and 8 packs can be requested. For a company already resolved in your tenant: ```json { "jsonrpc": "2.0", "id": 5, "method": "tools/call", "params": { "name": "get_entity", "arguments": { "entity_id": "ent_from_your_own_resolve_result", "fields": ["identity.legal_name"], "field_packs": ["financials"], "include_field_status": true } } } ``` Values keep their existing types. Explicit selections include `field_status`; `include_field_status` requests diagnostics for the complete view, and intelligence reads default to those diagnostics. Separate status entries explain `present`, `not_supported`, `not_configured`, `source_unavailable`, `licence_restricted` and `not_checked`. `not_checked` means this view has no authorized value or company-specific absence finding; it does not mean a supplier reported no value. Existing cited values can remain present during a connector outage. Resale permission remains attached to each fact. Financial scope remains `unknown` when the source does not establish whether a figure describes a legal entity or consolidated group. Check reporting period, currency and measurement basis alongside the amount. A candidate's `explanation` compares its visible name and domain with the submission; those comparisons are separate from calibrated `match_confidence` and acceptance. `get_entity_events` accepts `categories` to filter durable local watch changes. Advance using `next_cursor` even if `events` is empty: `scanned_count` describes the scanned page before category filtering. Watches inspect stored facts and configured local feeds; they do not establish live upstream freshness. ## Company workflows with retained local evidence These October 7 additions are implemented locally. The repository records development validation separately from deployment. Production is unchanged on schema `0029`. Development migration `0030` requires coordinated API/worker rollout. The running OpenAPI/tool catalogue states which contracts this deployment actually serves. | Workflow | Primary REST paths under `/v1` | |---|---| | Portfolios | `/portfolios`, `/portfolios/{portfolio_id}` and child routes | | Financial statements | `GET /entities/{entity_id}/financial-statements` | | Identifier lifecycle | `GET /entities/{entity_id}/identifier-history` | | Source disagreement | `POST /entities/{entity_id}/source-comparison` | | Typed local queries | `GET /reference/search-fields`; `POST /entities/query` | | Cited relationship paths | `POST /relationships/explain` | | Data-selection receipts | `POST /data-selections`; `/data-selections/{receipt_id}` | Equivalent registered MCP tools: - Portfolios: `manage_portfolio`, `list_portfolios`, `get_portfolio`, `manage_portfolio_member`, `get_portfolio_members`, `get_portfolio_events`, `enable_portfolio_watches`, `export_portfolio`. - Statements: `get_financial_statements`, `select_financial_statement`, `compare_financial_statements`. - Identifier lifecycle: `get_identifier_history`. - Source disagreement: `compare_entity_sources`. - Typed queries: `get_search_fields`, `query_companies`. - Relationships: `explain_relationship_paths`. - Receipts: `capture_data_selection`, `get_data_selection`, `delete_data_selection`. Use company IDs already owned by the authenticated tenant. Reads use retained facts/configured authorized local observations, with no provider or model calls. Remote `read` or `resolve` credentials can read; list edits, receipt creation and deletion require `resolve`. Optional `capture: true` also requires that scope. Ordinary reads save no receipt. These workflows make no company-match decision or source-fact correction. Discover filter operators with `get_search_fields` or the REST reference route. All query filters combine with AND. `identity.legal_name` supports `eq`, `contains`, `in`; `digital.domain` and `location.country` support `eq`, `in`. `entity_id` supports `eq`, `in`, and `created_at` supports `gte`, `lte`. Only `created_at`/`entity_id` are sortable, with `asc`/`desc` directions and an entity-ID tie-break. `UK` aliases to `GB`; date-times need timezones and must be UTC-representable. Returnable enrichment fields are not automatically searchable. For `POST /v1/entities/query`, this is the body; MCP `query_companies` takes it as `payload`: ```json { "filters": [{"field":"location.country","operator":"in","value":["GB","US"]}], "sort_by":"created_at","direction":"asc","limit":50,"scan_limit":500 } ``` Bounds are 16 filters, 50 strings per `in`, 100 matches and 1,000 scanned rows per request. Read `scanned_count` and follow `next_cursor` even through empty filtered pages, keeping the same filters/sort. Stop when it is null. The cursor fixes tenant/query and creation-time boundary; corrections/deletions can still change values. Source-effective `as_of` is not a complete knowledge snapshot. Financial selection takes a `selection` object with optional sibling `capture`. The exact wrapper is shared by REST and MCP. This MCP call only reads: ```json { "jsonrpc":"2.0","id":6,"method":"tools/call", "params":{ "name":"select_financial_statement", "arguments":{ "entity_id":"ent_from_your_own_resolve_result", "payload":{ "selection":{ "relative_period":0, "requirements":{"attributes":["financials.revenue"]}, "preferences":{"currency":"GBP","scope":"consolidated_group"} }, "capture":false } } } } ``` REST `POST /v1/entities/{entity_id}/financial-selection` takes that `payload` object as its body. Use exact `statement_id`, exact ISO `period_end`, or integer `relative_period` 0 to 20. Relative zero means the newest distinct available reporting end after strict requirements, not a calendar-year offset. Exact and relative periods cannot be combined. Both criteria objects support `source_id`, uppercase three-letter `currency`, `scope`, `basis` and exact financial `attributes`. Scope is `legal_entity`, `consolidated_group` or `unknown`; basis is `reported`, `derived`, `estimated`, `average`, `point_in_time` or `unknown`. Requirements never fall back; unavailable strict choices return `selected: null` and a gap. Preferences choose the fewest mismatches, then latest dates/stable ID. Read `requested`, `selected`, `actual`, `fallback_reasons` and `gaps` together. No FX conversion or consolidation inference occurs. The inventory returns stable IDs, source fingerprints, cited observations and truncation/coverage gaps. Archives retain admitted values already acquired, not all upstream filings. POST `/v1/entities/{entity_id}/financial-comparison` with `left_statement_id` and `right_statement_id`; the response keeps both cited statements, `inventory_gaps`, `inventory_truncated`, `inventory_note` and comparison gaps. A changed amount or amendment is not proof of restatement; explicit source restatement status and an earlier-accession link are required. Portfolios allow 100 lists per tenant and 1,000 owned companies per list. Create with `POST /v1/portfolios` and a name/optional stable `portfolio_id`; rename with PATCH, delete with DELETE. PUT/DELETE `/members/{entity_id}` maintain membership, with optional `customer_reference`/`role` as list metadata, not identity evidence. List/member/export pages have at most 100 entries. Watch enabling accepts `interval_seconds` 300 to 86400, `limit` and `cursor`; follow returned pages. At most 1,000 entity watches exist per tenant. Re-enabling preserves baselines; watches are shared across lists. Removing a list/member leaves company data and shared watches intact. Events expose local observation changes and advancing cursors/scanned counts, not complete provider history. Export pages contain current local values/citations and are not a frozen multi-page snapshot. Identifier history keeps sourced validity/successor evidence and paged durable local correction events separate. A provider removal is not dissolution and there is no automatic ID redirect. Source comparison takes `fields`, optional `include_history` and `capture`; it returns dated observations/survivor policy, disagreement, bounds, `withheld_by_licence` and `coverage_complete: false`. Future/pass-through values are excluded. Relationship explanation takes two owned entity IDs, optional `as_of`, `max_hops` 1 to 10, `limit` 1 to 20 and `capture`. Edges are cited and dated; share ownership, control and accounting consolidation stay distinct. Missing paths do not prove absence or shared legal identity. Set `capture: true` on financial selection, source comparison or relationships, or POST `/v1/data-selections` with `entity_ids`, optional `fields`, `field_packs` and `as_of`. Limits are 1,000 receipts per tenant, 100 companies, 5,000 contributing customer-record references and 2,000,000 UTF-8 JSON bytes per capture. Current projections refresh authorized local feeds; historical captures use retained stored facts, without replaying a complete old feed or prior knowledge state. Pass-through values never enter a saved capture. Receipts fix values, citations, source/evaluation dates, policy and fallback/gaps. Fingerprints normalize caller resale flags to false, as stated by `fingerprint_scope`; receipt retrieval derives current eligibility from captured licences and the current caller plan, preserving raw values. No supplier licence is acquired or refreshed. Entity, contributing customer-record and captured intermediary erasure purge the entire receipt. GET `/v1/data-selections/{receipt_id}` to reopen it; DELETE that path to remove the capture without changing company facts. Keep its reference to reopen/download it. For safe response-loss retries, supply a stable client-generated `capture_id` in the projection request or beside `capture` in a financial/source/relationship wrapper. This optional ID accepts ASCII `[A-Za-z0-9_-]{1,64}` and becomes `receipt_id`; otherwise it remains a generated `ds_`. Within the same tenant, the same ID and workflow/input intent return the original immutable receipt/snapshot with current caller redistribution rights. Changed intent returns HTTP `409`. Replay does not refresh observations or call remote providers. Deleting/erasing the receipt keeps that ID reserved; it cannot recreate the capture. Retry returns `409`, or company access checks may return `404` first. Use a new ID for a new capture. The ledger retains only tenant ID and SHA-256 token/intent hashes, with no plaintext token, company IDs or evidence. There are at most 10,000 explicit capture-ID reservations per tenant; the live receipt limit remains 1,000. The workspace exposes these operations through authenticated `/portal/api` routes. No Orbis dataset/access, global lifecycle database, complete upstream history, CRM writeback or new accuracy claim is implied. ## Interpret outcomes and recover safely Read `decision`, `match_confidence`, `match_confidence_basis`, `entity_created`, `clarification`, `candidates` and `usage` together. `unresolved` means the evidence did not justify a binding; it is not a transport error or proof no company exists. `entity_created` means new to this tenant, not independently proven identity. Read the receipt using `get_decision`. `match_records` is stateless and does not create a resolve receipt. Every enrichment field carries source/licence evidence; check its reporting period, currency and company/group scope. Income is not revenue. [Three complete captured responses and receipts](/api/demo) illustrate identity, ambiguity and weak-evidence abstention. They are dated, seeded, probabilistic offline examples with enrichment disabled; they do not demonstrate live research or full enrichment coverage. MCP can return an HTTP authentication failure before JSON-RPC execution, or a tool result with `isError: true`. Inspect `structuredContent.error` for the code, message, correlation ID and retry details when an application error is present. SDK argument/schema rejection can occur before application execution and contain only validation content, with no application metadata. Correct the input against the published schema; do not blindly retry or parse human prose for control flow. A JSON-RPC response arriving successfully is not proof the tool succeeded. [The operations guide](/api/operations) explains rate limits and safe retries. Both `resolve_company` and `match_records` accept `idempotency_key`. Reuse that key only for a retry of the same operation and unchanged arguments; changed content conflicts. A transport timeout may follow completed work: preserve the operation key and inspect state before deciding whether another execution is safe. Content replay and durable operation retry are separate concepts. Do not assume a different key makes an unresolved provider commitment safe to execute again. ## Durable batches from an agent Remote clients can submit a job, retain its ID and return later. This example can consume credits when the worker executes it: ```json { "jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": { "name": "submit_batch_job", "arguments": { "payload": {"records": [ {"name": "INSTITUTE OF PATENTEES & INVENTORS", "country": "GB", "registration_number": "00170887", "jurisdiction": "GB", "depth": "research"} ]}, "idempotency_key": "own-batch-evaluation-1" } } } ``` Read `get_batch_job` until a terminal state; honor retry timing. Prefer REST lifecycle SSE or signed completion webhooks when available. After success, `get_batch_job_results` pages complete per-record evidence with `offset`, `limit` and `next_offset`; stop when `next_offset` is null. Its `usage` is the same job total on every page: do not sum it across pages. The complete batch envelope, including pair diagnostics, is available at the returned REST `result_path`. `cancel_batch_job` only cancels queued work. Submission requires a remote issued credential; operator-local stdio cannot enqueue an unauthenticated job. See [operations](/api/operations) for states, reconnection and worker setup. ## Company-only reference batches without AI `POST /v1/company-reference/batch` and MCP `lookup_company_reference_batch` read the existing licensed Tenhaw company warehouse. They do not invoke company resolution, models, public registries or metered commercial enrichment APIs. The workspace Company lookup view also accepts a mapped UTF-8 CSV and exports the returned profiles. This workflow consumes zero resolution credits. The request takes `records` (1-100 rows) and `limit` (2-10 candidates per row, default 5). Each row accepts only `client_ref`, `domain` and optional US/GB `country`; UK aliases to GB. Unknown input columns are not imported. Example: ```json {"records":[{"client_ref":"crm-1","domain":"example.com","country":"GB"}],"limit":5} ``` For MCP put this object in `arguments.payload`. Each response row preserves its one-based `row_number` and original input. Status is `candidates`, `no_candidates`, `unavailable`, `missing_domain` or `invalid_input`. Unavailable results carry a fixed reason; they do not imply the company does not exist. Every competing profile up to the cap is retained, with explicit truncation and licensed, unverified source snapshot provenance. A profile is not a verified legal match; snapshot extraction dates do not establish field freshness. No profiles are automatically selected or written to a tenant entity/decision store. One batch admission and one ordinary tenant READ admission per distinct valid normalized domain/country are required before any warehouse lookup. Insufficient read allowance rejects the batch with rate_limited before source work. Duplicate rows share one lookup within a request but remain separate output rows. At most four warehouse queries run concurrently; a 30-second execution budget returns completed rows and explicitly labels unfinished rows unavailable/request_deadline. Each individual source read retains its existing five-second maximum budget. ## Local stdio and deployment Local stdio is an operator-owned process with direct database access. It is not an anonymous hosted trial. After configuring the database and current migrations: ```bash uv run python -m resolvd.mcpserver ``` To serve remote clients, configure TLS/reverse proxy, the real public origin, shared database and Redis before starting the listener: ```bash RESOLVD_MCP_TRANSPORT=streamable-http RESOLVD_MCP_HOST=0.0.0.0 \ RESOLVD_MCP_PORT=8081 uv run python -m resolvd.mcpserver ``` `RESOLVD_PUBLIC_BASE_URL` controls the admitted public Host/Origin. A wrong host can produce `421` even while `/healthz` succeeds. `/readyz` checks database, schema and index readiness; a green probe does not replace an external MCP handshake. The API and MCP processes must share tenant/account state and rate limits. No public deployment is implied by these local commands. ## Generated tool contract (50 tools) The following descriptions, schemas, annotations and metadata come directly from registered `tools/list` output. Registration inspection constructs no application container and invokes no authentication client, tool or provider. Use the schema rather than a remembered argument list. ### `resolve_company` Resolve a company record to a golden entity, creating one if it is new. Provide a company name and a valid country name or ISO code on every record. Website, description/context, postcode and identifiers are optional clues. The pipeline normalises the record, finds candidate entities, and decides match / no_match / unresolved. `unresolved` is an honest answer, not a failure: the evidence was ambiguous and the record was queued for review rather than guessed at; it carries `candidate` (the one the cascade came closest on), `candidates` (the whole shortlist, ranked best first) and `review_id` so you can fetch the review item. An actionable `clarification` names typed answer fields and visible candidate clues. Ask the caller for a clue they know, then resubmit their corrected input with the same `client_ref` and `clarification_of={record_id, decision_id}` from the unresolved result. The answer is unverified caller evidence, not a candidate-selection command; normal admission, plan limits and billing apply. A separately authorized reviewer can use review_submit when more evidence is still needed. When an entity is returned, every attribute in `record` carries a citation in `provenance` (source_id, source_url, licence). `decision_id` is the receipt: read it back with get_decision for the features, thresholds, cited evidence and a replay of the score. `description` aliases `context`; `postcode` aliases `address.postal_code`. Conflicting alias/canonical values are rejected. `context` is a bounded, unverified company description or location clue; authoritative contradictory evidence wins. `address` accepts structured line1, line2, city, region, postal_code and country fields. Both use the same validation and normalization as REST, including conflicting address clues. `entity_created` means the entity is new to this tenant's local store. That includes a confidently matched external-registry identity as well as a no-candidate mint; `match_confidence_basis` distinguishes match-side evidence from the weaker no-candidate/reject-side estimate. A single member record is never, by itself, corroboration that the company exists as described. `depth` is your cost ceiling: "probabilistic" makes no external call at all (no LLM, no research agent, no registry lookup) and answers in milliseconds, "adjudication" adds the LLM, "research" (the default) adds agentic registry/web research. Capping does not lower precision — a capped record abstains rather than being decided cheaply, and `depth_capped` tells you that is what happened. `enrich=false` turns the registries off at any depth. `usage` reports what this call cost and what your plan has left. An `unresolved` answer costs 0 credits. Discover `fields` and `field_packs` with get_enrichment_fields. Selection projects the returned entity and provenance. Opt into quality_target with explicit fields or packs for a default 0.95 match-confidence and 0.95 sourced completeness requirement. At research depth one bounded paid pass may gather missing supported descriptive fields. Unmet targets require review; model self-confidence and invented values cannot satisfy them. Selected fields carry a field_status; `not_checked` does not establish that the company lacks that value. ```json { "name": "resolve_company", "description": "Resolve a company record to a golden entity, creating one if it is new.\n\n Provide a company name and a valid country name or ISO code on every record.\n Website, description/context, postcode and identifiers are optional clues. The pipeline\n normalises the record, finds candidate entities, and decides match /\n no_match / unresolved. `unresolved` is an honest answer, not a failure: the\n evidence was ambiguous and the record was queued for review rather than\n guessed at; it carries `candidate` (the one the cascade came closest on),\n `candidates` (the whole shortlist, ranked best first) and `review_id` so you\n can fetch the review item. An actionable `clarification` names typed answer\n fields and visible candidate clues. Ask the caller for a clue they know,\n then resubmit their corrected input with the same `client_ref` and\n `clarification_of={record_id, decision_id}` from the unresolved result.\n The answer is unverified caller evidence, not a candidate-selection command;\n normal admission, plan limits and billing apply. A separately authorized\n reviewer can use review_submit when more evidence is still needed.\n When an entity is returned, every\n attribute in `record` carries a citation in `provenance` (source_id,\n source_url, licence).\n\n `decision_id` is the receipt: read it back with get_decision for the\n features, thresholds, cited evidence and a replay of the score.\n\n `description` aliases `context`; `postcode` aliases `address.postal_code`.\n Conflicting alias/canonical values are rejected. `context` is a bounded,\n unverified company description or location clue;\n authoritative contradictory evidence wins. `address` accepts structured\n line1, line2, city, region, postal_code and country fields. Both use the same\n validation and normalization as REST, including conflicting address clues.\n\n `entity_created` means the entity is new to this tenant's local store. That\n includes a confidently matched external-registry identity as well as a\n no-candidate mint; `match_confidence_basis` distinguishes match-side\n evidence from the weaker no-candidate/reject-side estimate. A single member\n record is never, by itself, corroboration that the company exists as\n described.\n\n `depth` is your cost ceiling: \"probabilistic\" makes no external call at all\n (no LLM, no research agent, no registry lookup) and answers in milliseconds,\n \"adjudication\" adds the LLM, \"research\" (the default) adds agentic\n registry/web research. Capping does not lower precision — a capped record\n abstains rather than being decided cheaply, and `depth_capped` tells you\n that is what happened. `enrich=false` turns the registries off at any depth.\n\n `usage` reports what this call cost and what your plan has left. An\n `unresolved` answer costs 0 credits.\n\n Discover `fields` and `field_packs` with get_enrichment_fields. Selection\n projects the returned entity and provenance. Opt into quality_target with\n explicit fields or packs for a default 0.95 match-confidence and 0.95 sourced\n completeness requirement. At research depth one bounded paid pass may gather\n missing supported descriptive fields. Unmet targets require review; model\n self-confidence and invented values cannot satisfy them. Selected fields\n carry a field_status;\n `not_checked` does not establish that the company lacks that value.\n ", "inputSchema": { "$defs": { "AddressRequest": { "additionalProperties": false, "properties": { "line1": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ], "default": null, "title": "Line1" }, "line2": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ], "default": null, "title": "Line2" }, "city": { "anyOf": [ { "maxLength": 128, "type": "string" }, { "type": "null" } ], "default": null, "title": "City" }, "region": { "anyOf": [ { "maxLength": 128, "type": "string" }, { "type": "null" } ], "default": null, "title": "Region" }, "postal_code": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ], "default": null, "title": "Postal Code" }, "country": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Country" } }, "title": "AddressRequest", "type": "object" }, "ClarificationOrigin": { "additionalProperties": false, "description": "A tenant-owned unresolved submission, never an admission instruction.", "properties": { "record_id": { "maxLength": 64, "minLength": 1, "title": "Record Id", "type": "string" }, "decision_id": { "anyOf": [ { "maxLength": 64, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Decision Id" }, "job_id": { "anyOf": [ { "maxLength": 64, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Job Id" }, "record_index": { "anyOf": [ { "maximum": 4999, "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "title": "Record Index" } }, "required": [ "record_id" ], "title": "ClarificationOrigin", "type": "object" }, "QualityTarget": { "additionalProperties": false, "description": "An opt-in delivery requirement, never a dial for changing confidence.", "properties": { "minimum_match_confidence": { "default": 0.95, "maximum": 1.0, "minimum": 0.9, "title": "Minimum Match Confidence", "type": "number" }, "minimum_completeness": { "default": 0.95, "exclusiveMinimum": 0.0, "maximum": 1.0, "title": "Minimum Completeness", "type": "number" } }, "title": "QualityTarget", "type": "object" }, "ResolutionDepth": { "description": "How far down the cascade a caller is willing to pay to go.\n\nThe cascade costs orders of magnitude more at the bottom than at the top\n(docs/COMMERCIAL-MODEL.md §2), so the depth cap is simultaneously the\ncaller's price ceiling and our cost ceiling. Capping does not lower\nprecision — a capped record abstains instead of being decided cheaply.", "enum": [ "probabilistic", "adjudication", "research" ], "title": "ResolutionDepth", "type": "string" } }, "additionalProperties": false, "properties": { "name": { "maxLength": 500, "minLength": 1, "title": "Name", "type": "string" }, "country": { "maxLength": 64, "minLength": 1, "title": "Country", "type": "string" }, "website": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Website" }, "domain": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Domain" }, "email": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Email" }, "phone": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Phone" }, "registration_number": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Registration Number" }, "jurisdiction": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Jurisdiction" }, "lei": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Lei" }, "depth": { "$ref": "#/$defs/ResolutionDepth", "default": "research" }, "enrich": { "default": true, "title": "Enrich", "type": "boolean" }, "address": { "anyOf": [ { "$ref": "#/$defs/AddressRequest" }, { "type": "null" } ], "default": null }, "context": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Context" }, "description": { "anyOf": [ { "maxLength": 1000, "type": "string" }, { "type": "null" } ], "default": null, "title": "Description" }, "postcode": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ], "default": null, "title": "Postcode" }, "trading_names": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Trading Names" }, "previous_names": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Previous Names" }, "incorporation_date": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "Incorporation Date" }, "legal_form": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Legal Form" }, "vat_number": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Vat Number" }, "duns": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Duns" }, "isin": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Isin" }, "ticker": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Ticker" }, "exchange": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Exchange" }, "parent_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Parent Name" }, "extra": { "anyOf": [ { "additionalProperties": { "type": "string" }, "type": "object" }, { "type": "null" } ], "default": null, "title": "Extra" }, "client_ref": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ], "default": null, "title": "Client Ref" }, "idempotency_key": { "anyOf": [ { "maxLength": 200, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Idempotency Key" }, "fields": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 64, "type": "array" }, { "type": "null" } ], "default": null, "title": "Fields" }, "field_packs": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 8, "type": "array" }, { "type": "null" } ], "default": null, "title": "Field Packs" }, "include_field_status": { "default": false, "title": "Include Field Status", "type": "boolean" }, "quality_target": { "anyOf": [ { "$ref": "#/$defs/QualityTarget" }, { "type": "null" } ], "default": null }, "clarification_of": { "anyOf": [ { "$ref": "#/$defs/ClarificationOrigin" }, { "type": "null" } ], "default": null } }, "required": [ "name", "country" ], "title": "resolve_companyArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "resolve_companyDictOutput", "type": "object" }, "_meta": { "resolvd": { "accepted_scopes": [ "resolve" ] } } } ``` ### `match_records` Decide whether two raw company records refer to the same company. `left` and `right` are company records. Each accepts name, website, domain, email, phone, registration_number, lei, jurisdiction, country, address and extra, and each requires a company name and a valid country name or ISO code. Country is a retrieval clue, not legal identity proof. Unknown field names are rejected rather than ignored. Returns the pairwise decision (match / no_match / unresolved), the pipeline stage that decided, the calibrated probability when one was computed, and the adjudicator's rationale when an LLM verdict was involved. `unresolved` means the evidence is genuinely ambiguous — do not treat it as a no_match. `depth` controls the entire comparison: probabilistic, adjudication or research (default). Choose probabilistic explicitly for a shallow attempt. ```json { "name": "match_records", "description": "Decide whether two raw company records refer to the same company.\n\n `left` and `right` are company records. Each accepts name, website, domain,\n email, phone, registration_number, lei, jurisdiction, country, address and\n extra, and each requires a company name and a valid country name or ISO code.\n Country is a retrieval clue, not legal identity proof. Unknown field names are\n rejected rather than ignored. Returns the pairwise decision (match /\n no_match / unresolved), the pipeline stage that decided, the calibrated\n probability when one was computed, and the adjudicator's rationale when an\n LLM verdict was involved. `unresolved` means the evidence is genuinely\n ambiguous — do not treat it as a no_match.\n\n `depth` controls the entire comparison: probabilistic, adjudication or\n research (default). Choose probabilistic explicitly for a shallow attempt.\n ", "inputSchema": { "$defs": { "AddressRequest": { "additionalProperties": false, "properties": { "line1": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ], "default": null, "title": "Line1" }, "line2": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ], "default": null, "title": "Line2" }, "city": { "anyOf": [ { "maxLength": 128, "type": "string" }, { "type": "null" } ], "default": null, "title": "City" }, "region": { "anyOf": [ { "maxLength": 128, "type": "string" }, { "type": "null" } ], "default": null, "title": "Region" }, "postal_code": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ], "default": null, "title": "Postal Code" }, "country": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Country" } }, "title": "AddressRequest", "type": "object" }, "CompanyComparisonRecord": { "additionalProperties": false, "properties": { "ticker": { "anyOf": [ { "maxLength": 16, "type": "string" }, { "type": "null" } ], "default": null, "title": "Ticker" }, "isin": { "anyOf": [ { "maxLength": 12, "type": "string" }, { "type": "null" } ], "default": null, "title": "Isin" }, "email": { "anyOf": [ { "maxLength": 320, "type": "string" }, { "type": "null" } ], "default": null, "title": "Email" }, "vat_number": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ], "default": null, "title": "Vat Number" }, "incorporation_date": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "Incorporation Date" }, "name": { "description": "Company name is required.", "maxLength": 500, "minLength": 1, "title": "Name", "type": "string" }, "previous_names": { "items": { "type": "string" }, "maxItems": 10, "title": "Previous Names", "type": "array" }, "country": { "description": "Required country name or ISO country code; a retrieval clue, not legal identity proof.", "maxLength": 64, "minLength": 1, "title": "Country", "type": "string" }, "domain": { "anyOf": [ { "maxLength": 253, "type": "string" }, { "type": "null" } ], "default": null, "title": "Domain" }, "exchange": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Exchange" }, "registration_number": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Registration Number" }, "jurisdiction": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ], "default": null, "title": "Jurisdiction" }, "context": { "anyOf": [ { "maxLength": 1000, "type": "string" }, { "type": "null" } ], "default": null, "description": "Anything you know about this company in plain language, e.g. 'recruitment company based in the UK, not the pub chain'. Use it when the name alone is ambiguous: it is weighed as evidence alongside the registers, and it is what separates two companies that share a name. It is treated as an unverified claim, so a register that contradicts it wins, and it cannot direct the answer — asserting the verdict or a confidence here has no effect.", "title": "Context" }, "parent_name": { "anyOf": [ { "maxLength": 500, "type": "string" }, { "type": "null" } ], "default": null, "title": "Parent Name" }, "legal_form": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Legal Form" }, "description": { "anyOf": [ { "maxLength": 1000, "type": "string" }, { "type": "null" } ], "default": null, "description": "Alias for context: an optional, unverified company description.", "title": "Description" }, "trading_names": { "items": { "type": "string" }, "maxItems": 10, "title": "Trading Names", "type": "array" }, "address": { "anyOf": [ { "$ref": "#/$defs/AddressRequest" }, { "type": "null" } ], "default": null }, "website": { "anyOf": [ { "maxLength": 500, "type": "string" }, { "type": "null" } ], "default": null, "title": "Website" }, "extra": { "additionalProperties": { "type": "string" }, "title": "Extra", "type": "object" }, "postcode": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ], "default": null, "description": "Alias for address.postal_code: an optional postcode or ZIP code.", "title": "Postcode" }, "duns": { "anyOf": [ { "maxLength": 16, "type": "string" }, { "type": "null" } ], "default": null, "title": "Duns" }, "lei": { "anyOf": [ { "maxLength": 20, "type": "string" }, { "type": "null" } ], "default": null, "title": "Lei" }, "phone": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Phone" } }, "required": [ "name", "country" ], "title": "CompanyComparisonRecord", "type": "object" }, "ResolutionDepth": { "description": "How far down the cascade a caller is willing to pay to go.\n\nThe cascade costs orders of magnitude more at the bottom than at the top\n(docs/COMMERCIAL-MODEL.md §2), so the depth cap is simultaneously the\ncaller's price ceiling and our cost ceiling. Capping does not lower\nprecision — a capped record abstains instead of being decided cheaply.", "enum": [ "probabilistic", "adjudication", "research" ], "title": "ResolutionDepth", "type": "string" } }, "additionalProperties": false, "properties": { "left": { "$ref": "#/$defs/CompanyComparisonRecord" }, "right": { "$ref": "#/$defs/CompanyComparisonRecord" }, "depth": { "$ref": "#/$defs/ResolutionDepth", "default": "research" }, "idempotency_key": { "anyOf": [ { "maxLength": 200, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Idempotency Key" } }, "required": [ "left", "right" ], "title": "match_recordsArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "match_recordsDictOutput", "type": "object" }, "_meta": { "resolvd": { "accepted_scopes": [ "resolve" ] } } } ``` ### `get_enrichment_fields` Discover enrichment fields, supplier readiness and your resale rights, free. Check this before requesting market cap, revenue, employees or sectors. Available means a configured connector supports the field, not that every company has a value. Unsupported requirements have no invented supplier. This calls no provider and writes no record or usage-ledger row. ```json { "name": "get_enrichment_fields", "description": "Discover enrichment fields, supplier readiness and your resale rights, free.\n\n Check this before requesting market cap, revenue, employees or sectors.\n Available means a configured connector supports the field, not that every\n company has a value. Unsupported requirements have no invented supplier.\n This calls no provider and writes no record or usage-ledger row.\n ", "inputSchema": { "additionalProperties": false, "properties": {}, "title": "get_enrichment_fieldsArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_enrichment_fieldsDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_entity` Fetch a resolved golden record by entity_id, with per-field provenance. Every attribute in `record` is the surviving value chosen by survivorship ranking; `provenance` cites where each value came from (source_id, source_url, licence). Raises an error if the entity does not exist — including one that exists under a different account, which is reported as absent rather than as forbidden. ```json { "name": "get_entity", "description": "Fetch a resolved golden record by entity_id, with per-field provenance.\n\n Every attribute in `record` is the surviving value chosen by survivorship\n ranking; `provenance` cites where each value came from (source_id,\n source_url, licence). Raises an error if the entity does not exist —\n including one that exists under a different account, which is reported as\n absent rather than as forbidden.\n ", "inputSchema": { "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "fields": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 64, "type": "array" }, { "type": "null" } ], "default": null, "title": "Fields" }, "field_packs": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 8, "type": "array" }, { "type": "null" } ], "default": null, "title": "Field Packs" }, "include_field_status": { "default": false, "title": "Include Field Status", "type": "boolean" } }, "required": [ "entity_id" ], "title": "get_entityArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_entityDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_crosswalk` Map one entity across every identifier system it is known by, cited. Returns `identifiers` (LEI, company number + its jurisdiction, CIK, every ticker with its exchange, DUNS), each with the citation, licence and freshness for THAT identifier — not one citation for the whole map. Use this when you need to join a company across systems rather than read its full record. `checked_and_empty` names the systems that produced nothing, and why: `not_found` means a wired source supplies that scheme and has no value for this company; `not_configured` means no source here supplies it at all. Treat those differently — only the first is a statement about the company. `ownership` defaults to one hop. Raise `max_hops` to follow exact LEIs or authority-scoped company numbers through entities already held by this tenant; `as_of` filters source-effective facts and PSC intervals. The walk is cycle-safe and refuses ambiguous or name-only edges. Its nodes, edges, candidate people, cycles and `not_traversed` ledger make those limits explicit, so do not read an empty parent as "no parent exists". ```json { "name": "get_crosswalk", "description": "Map one entity across every identifier system it is known by, cited.\n\n Returns `identifiers` (LEI, company number + its jurisdiction, CIK, every\n ticker with its exchange, DUNS), each with the citation, licence and\n freshness for THAT identifier — not one citation for the whole map. Use this\n when you need to join a company across systems rather than read its full\n record.\n\n `checked_and_empty` names the systems that produced nothing, and why:\n `not_found` means a wired source supplies that scheme and has no value for\n this company; `not_configured` means no source here supplies it at all.\n Treat those differently — only the first is a statement about the company.\n\n `ownership` defaults to one hop. Raise `max_hops` to follow exact LEIs or\n authority-scoped company numbers through entities already held by this\n tenant; `as_of` filters source-effective facts and PSC intervals. The walk\n is cycle-safe and refuses ambiguous or name-only edges. Its nodes, edges,\n candidate people, cycles and `not_traversed` ledger make those limits\n explicit, so do not read an empty parent as \"no parent exists\".\n ", "inputSchema": { "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "max_hops": { "default": 1, "maximum": 10, "minimum": 1, "title": "Max Hops", "type": "integer" }, "as_of": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "As Of" } }, "required": [ "entity_id" ], "title": "get_crosswalkArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_crosswalkDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `search_entities` Find entities already known here that match the given fields, without resolving. Returns lightweight candidates ({entity_id, legal_name, domain}) retrieved on the same blocking keys the cascade uses and RANKED by the same calibrated scorer, likeliest first — so the first row is the likeliest company rather than whichever entity id sorted lowest. No probability is returned: a score against a triage query is not a match claim, and resolve_company is what makes one. Nothing is written and nothing is charged. Use this to check whether a company is already known before spending a resolve; an empty list means no known entity shares an identifier or a name key with your input, which is not a claim that the company does not exist. Supply at least one of name, domain, registration_number or lei — country narrows a query but cannot retrieve on its own. ```json { "name": "search_entities", "description": "Find entities already known here that match the given fields, without resolving.\n\n Returns lightweight candidates ({entity_id, legal_name, domain}) retrieved\n on the same blocking keys the cascade uses and RANKED by the same calibrated\n scorer, likeliest first — so the first row is the likeliest company rather\n than whichever entity id sorted lowest. No probability is returned: a score\n against a triage query is not a match claim, and resolve_company is what\n makes one.\n\n Nothing is written and nothing is charged. Use this to check whether a\n company is already known before spending a resolve; an empty list means no\n known entity shares an identifier or a name key with your input, which is\n not a claim that the company does not exist.\n\n Supply at least one of name, domain, registration_number or lei — country\n narrows a query but cannot retrieve on its own.\n ", "inputSchema": { "additionalProperties": false, "properties": { "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Name" }, "domain": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Domain" }, "registration_number": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Registration Number" }, "lei": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Lei" }, "country": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Country" }, "limit": { "default": 10, "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" } }, "title": "search_entitiesArguments", "type": "object" }, "outputSchema": { "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "search_entitiesOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `review_queue_list` List review items — resolutions the pipeline abstained on — oldest first. Each item carries the submitted record, the candidate entity (if any), the ranked shortlist, the decision context and created_at. Paginate with limit/offset; submit a verdict for an item with review_submit. `status` selects "open" (the default — still awaiting a verdict), "resolved" or "all". `stage` separates "the model could not tell" from "the caller capped the depth", which are worked differently. `evidence_tier` selects the identifier/corroborated/uncorroborated calibration slice. `record_id` is the join back to a submission: resolve_company returns the record_id it minted, and this finds the queue item that submission produced. `min_confidence` drops items scored below the given probability — an item that never reached the scorer carries no probability and is dropped by any minimum at all. `sort="confidence_desc"` works the backlog by value instead of by arrival: the items nearest the auto-merge band are the cheapest to settle. Oldest first stays the default, so an agent that does not choose does not starve the tail of the queue. ```json { "name": "review_queue_list", "description": "List review items — resolutions the pipeline abstained on — oldest first.\n\n Each item carries the submitted record, the candidate entity (if any), the\n ranked shortlist, the decision context and created_at. Paginate with\n limit/offset; submit a verdict for an item with review_submit.\n\n `status` selects \"open\" (the default — still awaiting a verdict), \"resolved\"\n or \"all\". `stage` separates \"the model could not tell\" from \"the caller\n capped the depth\", which are worked differently. `evidence_tier` selects\n the identifier/corroborated/uncorroborated calibration slice. `record_id`\n is the join back to a submission: resolve_company returns the record_id it\n minted, and this finds the queue item that submission produced.\n `min_confidence` drops items scored below the given probability — an item\n that never reached the scorer carries no probability and is dropped by any\n minimum at all.\n\n `sort=\"confidence_desc\"` works the backlog by value instead of by arrival:\n the items nearest the auto-merge band are the cheapest to settle. Oldest\n first stays the default, so an agent that does not choose does not starve\n the tail of the queue.\n ", "inputSchema": { "$defs": { "ComparisonEvidenceTier": { "description": "Strength of the evidence that actually agrees for one comparison.\n\nPopulated fields are not evidence of a match. In particular, a legal name,\ncountry and legal form can all be present on both sides while still naming\ntwo unrelated companies. This tier is derived from agreement features so\nconfidence calibration cannot pool those name-only decisions with pairs\ncorroborated by an independent attribute.", "enum": [ "identifier", "corroborated", "uncorroborated" ], "title": "ComparisonEvidenceTier", "type": "string" }, "DecisionStage": { "enum": [ "deterministic", "probabilistic", "llm_adjudication", "agentic_research", "human_review" ], "title": "DecisionStage", "type": "string" }, "ReviewSort": { "description": "The orders a reviewer may walk the abstention queue in.\n\nA StrEnum so callers above this layer need not import from infrastructure:\nthe API defines its own query enum and hands the store its string value, the\nsame way `ReviewStatus` arrives here already reduced to `resolved: bool`.", "enum": [ "oldest_first", "newest_first", "confidence_desc", "confidence_asc" ], "title": "ReviewSort", "type": "string" }, "ReviewStatus": { "description": "Which slice of the queue a listing asks for.", "enum": [ "open", "resolved", "all" ], "title": "ReviewStatus", "type": "string" } }, "additionalProperties": false, "properties": { "limit": { "default": 20, "title": "Limit", "type": "integer" }, "offset": { "default": 0, "title": "Offset", "type": "integer" }, "status": { "$ref": "#/$defs/ReviewStatus", "default": "open" }, "stage": { "anyOf": [ { "$ref": "#/$defs/DecisionStage" }, { "type": "null" } ], "default": null }, "evidence_tier": { "anyOf": [ { "$ref": "#/$defs/ComparisonEvidenceTier" }, { "type": "null" } ], "default": null }, "record_id": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Record Id" }, "min_confidence": { "anyOf": [ { "maximum": 1.0, "minimum": 0.0, "type": "number" }, { "type": "null" } ], "default": null, "title": "Min Confidence" }, "sort": { "$ref": "#/$defs/ReviewSort", "default": "oldest_first" } }, "title": "review_queue_listArguments", "type": "object" }, "outputSchema": { "properties": { "result": { "items": { "additionalProperties": true, "type": "object" }, "title": "Result", "type": "array" } }, "required": [ "result" ], "title": "review_queue_listOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve", "review" ] } } } ``` ### `review_queue_get` Poll one review item: what the abstention was about, and whether it is settled. When resolve_company answers `unresolved` it returns the `review_id` of the item it queued. This is where that id is redeemed — an agent can track its own abstention to a verdict instead of re-resolving the record to find out, which would cost a second call and tell it less. `resolved` says whether a verdict has been reached, `reviewer_decision` what it was, and `applied` whether it changed stored state (`blocked_reason` says why it did not). An item belonging to another account reads as not found, never as forbidden. ```json { "name": "review_queue_get", "description": "Poll one review item: what the abstention was about, and whether it is settled.\n\n When resolve_company answers `unresolved` it returns the `review_id` of the\n item it queued. This is where that id is redeemed — an agent can track its\n own abstention to a verdict instead of re-resolving the record to find out,\n which would cost a second call and tell it less.\n\n `resolved` says whether a verdict has been reached, `reviewer_decision` what\n it was, and `applied` whether it changed stored state (`blocked_reason` says\n why it did not). An item belonging to another account reads as not found,\n never as forbidden.\n ", "inputSchema": { "additionalProperties": false, "properties": { "review_id": { "maxLength": 64, "title": "Review Id", "type": "string" } }, "required": [ "review_id" ], "title": "review_queue_getArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "review_queue_getDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve", "review" ] } } } ``` ### `get_decision` Read the receipt for a decision: features, thresholds, evidence and a replay. Every resolve returns a `decision_id`; this redeems it. An agent that can resolve but cannot pull the receipt for what it just resolved can report a conclusion and never the grounds for it — which is the difference between a tool a person can sign off on and one they have to take on trust. `replay.reproduced` is the part that matters: the scorer is re-run over the features stored at decision time and compared with the stored probability. It is null for a deterministic identifier match, which never reached the scorer, and `replay.pipeline_version_matches` says whether the weights doing the reproducing are the ones that decided. Pairwise match_records calls are stateless and mint no receipt — there is no decision_id to read back. A decision belonging to another account reads as not found, never as forbidden. ```json { "name": "get_decision", "description": "Read the receipt for a decision: features, thresholds, evidence and a replay.\n\n Every resolve returns a `decision_id`; this redeems it. An agent that can\n resolve but cannot pull the receipt for what it just resolved can report a\n conclusion and never the grounds for it — which is the difference between a\n tool a person can sign off on and one they have to take on trust.\n\n `replay.reproduced` is the part that matters: the scorer is re-run over the\n features stored at decision time and compared with the stored probability.\n It is null for a deterministic identifier match, which never reached the\n scorer, and `replay.pipeline_version_matches` says whether the weights doing\n the reproducing are the ones that decided.\n\n Pairwise match_records calls are stateless and mint no receipt — there is no\n decision_id to read back. A decision belonging to another account reads as\n not found, never as forbidden.\n ", "inputSchema": { "additionalProperties": false, "properties": { "decision_id": { "maxLength": 64, "title": "Decision Id", "type": "string" } }, "required": [ "decision_id" ], "title": "get_decisionArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_decisionDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve", "review" ] } } } ``` ### `get_usage` What your account has spent and how much of it was automated, with intervals. An agent budgets its own spend, and the `usage` block on a resolve only reports one call. This is the period: calls, credits, automation rate, abstention rate and the stage and endpoint mix — every rate with its 95% Wilson interval and the sample behind it, because an automation rate of 1.0 over nine calls and one over nine thousand are the same number and not the same claim. `since` and `until` are dates read as UTC and applied half-open, so two adjacent periods sum without double-counting; `until` covers the whole of that day. Omitted, the window is your billing period, which is the same span the `usage` block on every other tool is summed over. `not_measured` names what this cannot tell you and why — precision above all, which no view of usage can measure, because review items exist only where the pipeline abstained and the automatically merged population carries no labels. ```json { "name": "get_usage", "description": "What your account has spent and how much of it was automated, with intervals.\n\n An agent budgets its own spend, and the `usage` block on a resolve only\n reports one call. This is the period: calls, credits, automation rate,\n abstention rate and the stage and endpoint mix — every rate with its 95%\n Wilson interval and the sample behind it, because an automation rate of 1.0\n over nine calls and one over nine thousand are the same number and not the\n same claim.\n\n `since` and `until` are dates read as UTC and applied half-open, so two\n adjacent periods sum without double-counting; `until` covers the whole of\n that day. Omitted, the window is your billing period, which is the same span\n the `usage` block on every other tool is summed over.\n\n `not_measured` names what this cannot tell you and why — precision above all,\n which no view of usage can measure, because review items exist only where the\n pipeline abstained and the automatically merged population carries no labels.\n ", "inputSchema": { "additionalProperties": false, "properties": { "since": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "Since" }, "until": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "Until" } }, "title": "get_usageArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_usageDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_evaluation` Read lifetime evaluation balances, expiry, pauses and source configuration for free. No grant is created and validity does not start. Credits and deep attempts are independent lifetime balances shared with REST and every tenant key. ```json { "name": "get_evaluation", "description": "Read lifetime evaluation balances, expiry, pauses and source configuration for free.\n\n No grant is created and validity does not start. Credits and deep attempts\n are independent lifetime balances shared with REST and every tenant key.\n ", "inputSchema": { "additionalProperties": false, "properties": {}, "title": "get_evaluationArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_evaluationDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `review_submit` Submit a human/agent verdict for an open review item. `decision` must be either "match" or "no_match" — a reviewer settles the item, and "unresolved" is the state it is already in. Resolves the item and returns its final state; this is how ambiguous cases get settled by a reviewer instead of an over-confident automatic merge. An item that already carries a verdict is an error, not an overwrite. A remote call requires a separately issued `review` credential. Its stored, immutable name becomes the accountable reviewer principal; `reviewer_id` is optional transition data and, when supplied, must equal that name. The credential and the fact that the verdict arrived over MCP are recorded beside it automatically. A trusted local stdio operator may still name the analyst explicitly because that process is itself the operator boundary. `reason` is what settled it, stored on the same audit row. `applied` says whether the verdict changed stored state and `blocked_reason` says why it did not — the candidate was never stored, has been erased, or the merge guard refused the merge. ```json { "name": "review_submit", "description": "Submit a human/agent verdict for an open review item.\n\n `decision` must be either \"match\" or \"no_match\" — a reviewer settles the\n item, and \"unresolved\" is the state it is already in. Resolves the item and\n returns its final state; this is how ambiguous cases get settled by a\n reviewer instead of an over-confident automatic merge. An item that already\n carries a verdict is an error, not an overwrite.\n\n A remote call requires a separately issued `review` credential. Its stored,\n immutable name becomes the accountable reviewer principal; `reviewer_id` is\n optional transition data and, when supplied, must equal that name. The\n credential and the fact that the verdict arrived over MCP are recorded beside\n it automatically. A trusted local stdio operator may still name the analyst\n explicitly because that process is itself the operator boundary.\n\n `reason` is what settled it, stored on the same audit row.\n\n `applied` says whether the verdict changed stored state and `blocked_reason`\n says why it did not — the candidate was never stored, has been erased, or\n the merge guard refused the merge.\n ", "inputSchema": { "additionalProperties": false, "properties": { "review_id": { "maxLength": 64, "title": "Review Id", "type": "string" }, "decision": { "title": "Decision", "type": "string" }, "reviewer_id": { "anyOf": [ { "maxLength": 255, "type": "string" }, { "type": "null" } ], "default": null, "title": "Reviewer Id" }, "reason": { "anyOf": [ { "maxLength": 2000, "type": "string" }, { "type": "null" } ], "default": null, "title": "Reason" } }, "required": [ "review_id", "decision" ], "title": "review_submitArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "review_submitDictOutput", "type": "object" }, "_meta": { "resolvd": { "accepted_scopes": [ "review" ] } } } ``` ### `submit_batch_job` Queue durable resolution/enrichment with the same batch contract and billing as REST. Requires an issued remote resolve credential and a stable idempotency_key. Retry with identical input/key to recover the same job; a changed input conflicts. Up to the deployment's batch limit (default 500) per job; split 1,000 records into two jobs. Inspect get_evaluation/get_usage first for depth and credit limits. Returns immediately. Use get_batch_job/results, lifecycle SSE or a registered webhook to observe completion. A worker must be running beside the API. ```json { "name": "submit_batch_job", "description": "Queue durable resolution/enrichment with the same batch contract and billing as REST.\n\n Requires an issued remote resolve credential and a stable idempotency_key.\n Retry with identical input/key to recover the same job; a changed input conflicts.\n Up to the deployment's batch limit (default 500) per job; split 1,000 records\n into two jobs. Inspect get_evaluation/get_usage first for depth and credit limits.\n Returns immediately. Use get_batch_job/results, lifecycle SSE or a registered\n webhook to observe completion. A worker must be running beside the API.\n ", "inputSchema": { "$defs": { "AddressRequest": { "additionalProperties": false, "properties": { "line1": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ], "default": null, "title": "Line1" }, "line2": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ], "default": null, "title": "Line2" }, "city": { "anyOf": [ { "maxLength": 128, "type": "string" }, { "type": "null" } ], "default": null, "title": "City" }, "region": { "anyOf": [ { "maxLength": 128, "type": "string" }, { "type": "null" } ], "default": null, "title": "Region" }, "postal_code": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ], "default": null, "title": "Postal Code" }, "country": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Country" } }, "title": "AddressRequest", "type": "object" }, "BatchRequest": { "additionalProperties": false, "properties": { "records": { "items": { "$ref": "#/$defs/ResolveRequest" }, "maxItems": 5000, "minItems": 1, "title": "Records", "type": "array" } }, "required": [ "records" ], "title": "BatchRequest", "type": "object" }, "ClarificationOrigin": { "additionalProperties": false, "description": "A tenant-owned unresolved submission, never an admission instruction.", "properties": { "record_id": { "maxLength": 64, "minLength": 1, "title": "Record Id", "type": "string" }, "decision_id": { "anyOf": [ { "maxLength": 64, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Decision Id" }, "job_id": { "anyOf": [ { "maxLength": 64, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Job Id" }, "record_index": { "anyOf": [ { "maximum": 4999, "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "title": "Record Index" } }, "required": [ "record_id" ], "title": "ClarificationOrigin", "type": "object" }, "QualityTarget": { "additionalProperties": false, "description": "An opt-in delivery requirement, never a dial for changing confidence.", "properties": { "minimum_match_confidence": { "default": 0.95, "maximum": 1.0, "minimum": 0.9, "title": "Minimum Match Confidence", "type": "number" }, "minimum_completeness": { "default": 0.95, "exclusiveMinimum": 0.0, "maximum": 1.0, "title": "Minimum Completeness", "type": "number" } }, "title": "QualityTarget", "type": "object" }, "ResolutionDepth": { "description": "How far down the cascade a caller is willing to pay to go.\n\nThe cascade costs orders of magnitude more at the bottom than at the top\n(docs/COMMERCIAL-MODEL.md §2), so the depth cap is simultaneously the\ncaller's price ceiling and our cost ceiling. Capping does not lower\nprecision — a capped record abstains instead of being decided cheaply.", "enum": [ "probabilistic", "adjudication", "research" ], "title": "ResolutionDepth", "type": "string" }, "ResolveRequest": { "additionalProperties": false, "description": "Mirrors CompanyRecord's caller-suppliable fields with hard input caps.\n\nWHAT MAY BE ADDED HERE, and where it goes. Every field below that describes\nthe company is mapped onto `CompanyRecord` and is therefore inside the\ncontent fingerprint — see that class for the rule and why both halves of it\nmatter. Fields that describe the CALL rather than the company (`depth`,\n`enrich`, `client_ref`) stay on this request and never reach the record.\n\nThe identifiers are two classes and the distinction decides where in the\ncascade they may ever be used:\n\n* STRONG IDENTIFIER — one value, one company, issued by a body that\n guarantees it. `lei`, `registration_number` + `jurisdiction`, `duns`, and\n `ticker` + `exchange`. These are the only kind that could justify a\n deterministic short-circuit.\n* CORROBORATING SIGNAL — narrows the field, settles nothing alone.\n `vat_number`, `isin`, `incorporation_date`, `legal_form`, `trading_names`,\n `previous_names`, `parent_name`, `context`, `extra`.\n\nTwo of these look strong and are not, which is the whole reason the\ndistinction is written down rather than inferred from the field name:\n\n* `vat_number` — group VAT registration is MANY companies to ONE number, so\n equal VAT numbers do not imply one company. It may corroborate a merge and\n may never carry one.\n* `isin` — identifies a security, not an issuer. One company has many, and a\n financing subsidiary issues under itself. It becomes strong only once\n GLEIF's ISIN->LEI mapping resolves it to an LEI, which already is.\n\nREJECTED, with the reason, because a wide schema nobody populates is worse\nthan a narrow one:\n\n* `employee_count` — self-reported, ranges disagree between every source\n that publishes one, and it moves monthly. Enrichment already carries\n `financials.employees_range`; a caller-supplied count would contradict it\n routinely and the contradiction would mean nothing.\n* `industry_code` — not comparable without also negotiating a scheme (SIC\n 62020 and NAICS 541512 are the same activity and share no characters), and\n every member of a group files the same code, so it separates nothing.\n `context` carries the same intent — \"IT consultancy, not the pub of\n the same name\" — with no scheme to agree on.\n* `company_status` — a register-derived attribute we already fetch\n (`registration.status` in `llm.prompts.ENRICHMENT_ATTRIBUTES`). A caller\n asserting it adds no information and can only contradict the register,\n which is the one source that outranks them.", "properties": { "name": { "description": "Company name is required.", "maxLength": 500, "minLength": 1, "title": "Name", "type": "string" }, "website": { "anyOf": [ { "maxLength": 500, "type": "string" }, { "type": "null" } ], "default": null, "title": "Website" }, "domain": { "anyOf": [ { "maxLength": 253, "type": "string" }, { "type": "null" } ], "default": null, "title": "Domain" }, "email": { "anyOf": [ { "maxLength": 320, "type": "string" }, { "type": "null" } ], "default": null, "title": "Email" }, "phone": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Phone" }, "registration_number": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Registration Number" }, "jurisdiction": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ], "default": null, "title": "Jurisdiction" }, "lei": { "anyOf": [ { "maxLength": 20, "type": "string" }, { "type": "null" } ], "default": null, "title": "Lei" }, "address": { "anyOf": [ { "$ref": "#/$defs/AddressRequest" }, { "type": "null" } ], "default": null }, "country": { "description": "Required country name or ISO country code; a retrieval clue, not legal identity proof.", "maxLength": 64, "minLength": 1, "title": "Country", "type": "string" }, "trading_names": { "items": { "type": "string" }, "maxItems": 10, "title": "Trading Names", "type": "array" }, "previous_names": { "items": { "type": "string" }, "maxItems": 10, "title": "Previous Names", "type": "array" }, "incorporation_date": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "Incorporation Date" }, "legal_form": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Legal Form" }, "vat_number": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ], "default": null, "title": "Vat Number" }, "duns": { "anyOf": [ { "maxLength": 16, "type": "string" }, { "type": "null" } ], "default": null, "title": "Duns" }, "isin": { "anyOf": [ { "maxLength": 12, "type": "string" }, { "type": "null" } ], "default": null, "title": "Isin" }, "ticker": { "anyOf": [ { "maxLength": 16, "type": "string" }, { "type": "null" } ], "default": null, "title": "Ticker" }, "exchange": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Exchange" }, "parent_name": { "anyOf": [ { "maxLength": 500, "type": "string" }, { "type": "null" } ], "default": null, "title": "Parent Name" }, "context": { "anyOf": [ { "maxLength": 1000, "type": "string" }, { "type": "null" } ], "default": null, "description": "Anything you know about this company in plain language, e.g. 'recruitment company based in the UK, not the pub chain'. Use it when the name alone is ambiguous: it is weighed as evidence alongside the registers, and it is what separates two companies that share a name. It is treated as an unverified claim, so a register that contradicts it wins, and it cannot direct the answer — asserting the verdict or a confidence here has no effect.", "title": "Context" }, "description": { "anyOf": [ { "maxLength": 1000, "type": "string" }, { "type": "null" } ], "default": null, "description": "Alias for context: an optional, unverified company description.", "title": "Description" }, "postcode": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ], "default": null, "description": "Alias for address.postal_code: an optional postcode or ZIP code.", "title": "Postcode" }, "clarification_of": { "anyOf": [ { "$ref": "#/$defs/ClarificationOrigin" }, { "type": "null" } ], "default": null }, "extra": { "additionalProperties": { "type": "string" }, "title": "Extra", "type": "object" }, "depth": { "$ref": "#/$defs/ResolutionDepth", "default": "research" }, "enrich": { "default": true, "title": "Enrich", "type": "boolean" }, "client_ref": { "anyOf": [ { "maxLength": 200, "type": "string" }, { "type": "null" } ], "default": null, "title": "Client Ref" }, "fields": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 64, "type": "array" }, { "type": "null" } ], "default": null, "description": "Returned entity attributes; discover them at /v1/reference/enrichment-fields. Projection only: does not change identity evidence, acquisition, confidence or billing.", "title": "Fields" }, "field_packs": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 8, "type": "array" }, { "type": "null" } ], "default": null, "description": "Named groups of returned attributes; combined with fields. Missing values have explicit status rather than invented data.", "title": "Field Packs" }, "include_field_status": { "default": false, "title": "Include Field Status", "type": "boolean" }, "quality_target": { "anyOf": [ { "$ref": "#/$defs/QualityTarget" }, { "type": "null" } ], "default": null, "description": "Optional delivery target, defaulting to 0.95 calibrated match confidence and 0.95 sourced completeness. Requires explicit nonempty fields or field_packs. At research depth, missing supported descriptive fields may trigger one bounded paid research pass. Unmet targets are reported for review; values are never invented." } }, "required": [ "name", "country" ], "title": "ResolveRequest", "type": "object" } }, "additionalProperties": false, "properties": { "payload": { "$ref": "#/$defs/BatchRequest" }, "idempotency_key": { "maxLength": 200, "minLength": 1, "title": "Idempotency Key", "type": "string" } }, "required": [ "payload", "idempotency_key" ], "title": "submit_batch_jobArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "submit_batch_jobDictOutput", "type": "object" }, "annotations": { "destructiveHint": false, "idempotentHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "resolve" ] } } } ``` ### `get_batch_job` Read this tenant's durable job state. Terminal failures are never silently replayed. Prefer completion webhooks or GET /v1/batch-jobs/{job_id}/events (SSE) over polling. reconciliation_required means execution was interrupted and may have incurred cost. ```json { "name": "get_batch_job", "description": "Read this tenant's durable job state. Terminal failures are never silently replayed.\n\n Prefer completion webhooks or GET /v1/batch-jobs/{job_id}/events (SSE) over polling.\n reconciliation_required means execution was interrupted and may have incurred cost.\n ", "inputSchema": { "additionalProperties": false, "properties": { "job_id": { "maxLength": 64, "title": "Job Id", "type": "string" } }, "required": [ "job_id" ], "title": "get_batch_jobArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_batch_jobDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_batch_job_results` Read a bounded page of completed enriched outcomes without rerunning or charging. Returns full per-record evidence/fields in outcomes, total and next_offset. The complete batch envelope, including pair-level diagnostics, is available at GET /v1/batch-jobs/{job_id}/result. Pending/failed/erased jobs return a typed error. ```json { "name": "get_batch_job_results", "description": "Read a bounded page of completed enriched outcomes without rerunning or charging.\n\n Returns full per-record evidence/fields in outcomes, total and next_offset.\n The complete batch envelope, including pair-level diagnostics, is available\n at GET /v1/batch-jobs/{job_id}/result. Pending/failed/erased jobs return a typed error.\n ", "inputSchema": { "additionalProperties": false, "properties": { "job_id": { "maxLength": 64, "title": "Job Id", "type": "string" }, "offset": { "default": 0, "minimum": 0, "title": "Offset", "type": "integer" }, "limit": { "default": 20, "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" } }, "required": [ "job_id" ], "title": "get_batch_job_resultsArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_batch_job_resultsDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `cancel_batch_job` Cancel a queued job; repeated cancellation is safe. Running work returns a conflict. ```json { "name": "cancel_batch_job", "description": "Cancel a queued job; repeated cancellation is safe. Running work returns a conflict.", "inputSchema": { "additionalProperties": false, "properties": { "job_id": { "maxLength": 64, "title": "Job Id", "type": "string" } }, "required": [ "job_id" ], "title": "cancel_batch_jobArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "cancel_batch_jobDictOutput", "type": "object" }, "annotations": { "destructiveHint": false, "idempotentHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "resolve" ] } } } ``` ### `get_search_fields` Discover exact local filter/operators/sorting; returnable fields are separate. ```json { "name": "get_search_fields", "description": "Discover exact local filter/operators/sorting; returnable fields are separate.", "inputSchema": { "additionalProperties": false, "properties": {}, "title": "get_search_fieldsArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_search_fieldsDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `query_companies` Query stored owned companies using typed filters and a resumable bounded scan. Empty filtered pages can have next_cursor. Creation boundaries are frozen; corrections can change values. No external search or supplier call is made. ```json { "name": "query_companies", "description": "Query stored owned companies using typed filters and a resumable bounded scan.\n\n Empty filtered pages can have next_cursor. Creation boundaries are frozen;\n corrections can change values. No external search or supplier call is made.\n ", "inputSchema": { "$defs": { "CompanyFilter": { "additionalProperties": false, "properties": { "field": { "enum": [ "identity.legal_name", "digital.domain", "location.country", "entity_id", "created_at" ], "title": "Field", "type": "string" }, "operator": { "enum": [ "eq", "contains", "in", "gte", "lte" ], "title": "Operator", "type": "string" }, "value": { "anyOf": [ { "type": "string" }, { "items": { "type": "string" }, "type": "array" } ], "title": "Value" } }, "required": [ "field", "operator", "value" ], "title": "CompanyFilter", "type": "object" }, "CompanySearch": { "additionalProperties": false, "properties": { "filters": { "items": { "$ref": "#/$defs/CompanyFilter" }, "maxItems": 16, "title": "Filters", "type": "array" }, "sort_by": { "default": "created_at", "enum": [ "created_at", "entity_id" ], "title": "Sort By", "type": "string" }, "direction": { "default": "asc", "enum": [ "asc", "desc" ], "title": "Direction", "type": "string" }, "as_of": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "default": null, "title": "As Of" }, "cursor": { "anyOf": [ { "maxLength": 2048, "type": "string" }, { "type": "null" } ], "default": null, "title": "Cursor" }, "limit": { "default": 50, "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" }, "scan_limit": { "default": 500, "maximum": 1000, "minimum": 1, "title": "Scan Limit", "type": "integer" } }, "title": "CompanySearch", "type": "object" } }, "additionalProperties": false, "properties": { "payload": { "$ref": "#/$defs/CompanySearch" } }, "required": [ "payload" ], "title": "query_companiesArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "query_companiesDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `manage_portfolio` Create, rename or delete an owned saved company set; company facts stay intact. Creation with a supplied ID is idempotent. Deletion removes this portfolio's memberships; shared company watches remain enabled. ```json { "name": "manage_portfolio", "description": "Create, rename or delete an owned saved company set; company facts stay intact.\n\n Creation with a supplied ID is idempotent. Deletion removes this portfolio's\n memberships; shared company watches remain enabled.\n ", "inputSchema": { "additionalProperties": false, "properties": { "action": { "enum": [ "create", "rename", "delete" ], "title": "Action", "type": "string" }, "portfolio_id": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Portfolio Id" }, "name": { "anyOf": [ { "maxLength": 120, "type": "string" }, { "type": "null" } ], "default": null, "title": "Name" } }, "required": [ "action" ], "title": "manage_portfolioArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "manage_portfolioDictOutput", "type": "object" }, "_meta": { "resolvd": { "accepted_scopes": [ "resolve" ] } } } ``` ### `list_portfolios` List this tenant's named portfolios with a scoped continuation cursor. ```json { "name": "list_portfolios", "description": "List this tenant's named portfolios with a scoped continuation cursor.", "inputSchema": { "additionalProperties": false, "properties": { "cursor": { "anyOf": [ { "maxLength": 2048, "type": "string" }, { "type": "null" } ], "default": null, "title": "Cursor" }, "limit": { "default": 50, "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" } }, "title": "list_portfoliosArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "list_portfoliosDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_portfolio` Read an owned portfolio's name and membership count. ```json { "name": "get_portfolio", "description": "Read an owned portfolio's name and membership count.", "inputSchema": { "additionalProperties": false, "properties": { "portfolio_id": { "maxLength": 64, "title": "Portfolio Id", "type": "string" } }, "required": [ "portfolio_id" ], "title": "get_portfolioArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_portfolioDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `manage_portfolio_member` Idempotently add/update an owned company membership or remove it. Customer references and roles are portfolio metadata, never identity evidence. ```json { "name": "manage_portfolio_member", "description": "Idempotently add/update an owned company membership or remove it.\n\n Customer references and roles are portfolio metadata, never identity evidence.\n ", "inputSchema": { "additionalProperties": false, "properties": { "portfolio_id": { "maxLength": 64, "title": "Portfolio Id", "type": "string" }, "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "action": { "enum": [ "add", "remove" ], "title": "Action", "type": "string" }, "customer_reference": { "anyOf": [ { "maxLength": 256, "type": "string" }, { "type": "null" } ], "default": null, "title": "Customer Reference" }, "role": { "anyOf": [ { "maxLength": 64, "type": "string" }, { "type": "null" } ], "default": null, "title": "Role" } }, "required": [ "portfolio_id", "entity_id", "action" ], "title": "manage_portfolio_memberArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "manage_portfolio_memberDictOutput", "type": "object" }, "_meta": { "resolvd": { "accepted_scopes": [ "resolve" ] } } } ``` ### `get_portfolio_members` Read a bounded membership page with customer references and roles. ```json { "name": "get_portfolio_members", "description": "Read a bounded membership page with customer references and roles.", "inputSchema": { "additionalProperties": false, "properties": { "portfolio_id": { "maxLength": 64, "title": "Portfolio Id", "type": "string" }, "cursor": { "anyOf": [ { "maxLength": 2048, "type": "string" }, { "type": "null" } ], "default": null, "title": "Cursor" }, "limit": { "default": 100, "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" } }, "required": [ "portfolio_id" ], "title": "get_portfolio_membersArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_portfolio_membersDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_portfolio_events` Read consolidated local changes; filtered pages advance over scanned events. ```json { "name": "get_portfolio_events", "description": "Read consolidated local changes; filtered pages advance over scanned events.", "inputSchema": { "additionalProperties": false, "properties": { "portfolio_id": { "maxLength": 64, "title": "Portfolio Id", "type": "string" }, "after_id": { "default": 0, "maximum": 2147483647, "minimum": 0, "title": "After Id", "type": "integer" }, "limit": { "default": 100, "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" }, "categories": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 16, "type": "array" }, { "type": "null" } ], "default": null, "title": "Categories" } }, "required": [ "portfolio_id" ], "title": "get_portfolio_eventsArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_portfolio_eventsDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `enable_portfolio_watches` Enable bounded local watches for members; follow next_cursor for another page. This compares stored/configured local observations and makes no provider calls. ```json { "name": "enable_portfolio_watches", "description": "Enable bounded local watches for members; follow next_cursor for another page.\n\n This compares stored/configured local observations and makes no provider calls.\n ", "inputSchema": { "$defs": { "WatchPageRequest": { "additionalProperties": false, "properties": { "cursor": { "anyOf": [ { "maxLength": 2048, "type": "string" }, { "type": "null" } ], "default": null, "title": "Cursor" }, "limit": { "default": 100, "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" }, "interval_seconds": { "default": 86400, "maximum": 86400, "minimum": 300, "title": "Interval Seconds", "type": "integer" } }, "title": "WatchPageRequest", "type": "object" } }, "additionalProperties": false, "properties": { "portfolio_id": { "maxLength": 64, "title": "Portfolio Id", "type": "string" }, "payload": { "$ref": "#/$defs/WatchPageRequest" } }, "required": [ "portfolio_id", "payload" ], "title": "enable_portfolio_watchesArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "enable_portfolio_watchesDictOutput", "type": "object" }, "_meta": { "resolvd": { "accepted_scopes": [ "resolve" ] } } } ``` ### `export_portfolio` Export a bounded page of current local values and unchanged provenance/rights. Pages are not a frozen snapshot; use capture_data_selection for selected members. ```json { "name": "export_portfolio", "description": "Export a bounded page of current local values and unchanged provenance/rights.\n\n Pages are not a frozen snapshot; use capture_data_selection for selected members.\n ", "inputSchema": { "additionalProperties": false, "properties": { "portfolio_id": { "maxLength": 64, "title": "Portfolio Id", "type": "string" }, "cursor": { "anyOf": [ { "maxLength": 2048, "type": "string" }, { "type": "null" } ], "default": null, "title": "Cursor" }, "limit": { "default": 100, "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" } }, "required": [ "portfolio_id" ], "title": "export_portfolioArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "export_portfolioDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_financial_statements` Read available retained filing/observation history with cited metrics and gaps. ```json { "name": "get_financial_statements", "description": "Read available retained filing/observation history with cited metrics and gaps.", "inputSchema": { "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "limit": { "default": 100, "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" } }, "required": [ "entity_id" ], "title": "get_financial_statementsArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_financial_statementsDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `select_financial_statement` Select an exact filing or period with strict criteria and disclosed preference fallback. capture=true saves a reproducible receipt and requires a resolve credential. Default selection only reads; missing financial observations remain gaps. ```json { "name": "select_financial_statement", "description": "Select an exact filing or period with strict criteria and disclosed preference fallback.\n\n capture=true saves a reproducible receipt and requires a resolve credential.\n Default selection only reads; missing financial observations remain gaps.\n ", "inputSchema": { "$defs": { "FinancialSelection": { "additionalProperties": false, "properties": { "statement_id": { "anyOf": [ { "maxLength": 128, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Statement Id" }, "period_end": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "Period End" }, "relative_period": { "anyOf": [ { "maximum": 20, "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "title": "Relative Period" }, "requirements": { "$ref": "#/$defs/StatementCriteria" }, "preferences": { "$ref": "#/$defs/StatementCriteria" } }, "title": "FinancialSelection", "type": "object" }, "FinancialSelectionRequest": { "additionalProperties": false, "properties": { "selection": { "$ref": "#/$defs/FinancialSelection" }, "capture": { "default": false, "title": "Capture", "type": "boolean" }, "capture_id": { "anyOf": [ { "maxLength": 64, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "type": "string" }, { "type": "null" } ], "default": null, "title": "Capture Id" } }, "title": "FinancialSelectionRequest", "type": "object" }, "StatementCriteria": { "additionalProperties": false, "properties": { "source_id": { "anyOf": [ { "maxLength": 128, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Source Id" }, "currency": { "anyOf": [ { "pattern": "^[A-Z]{3}$", "type": "string" }, { "type": "null" } ], "default": null, "title": "Currency" }, "scope": { "anyOf": [ { "enum": [ "legal_entity", "consolidated_group", "unknown" ], "type": "string" }, { "type": "null" } ], "default": null, "title": "Scope" }, "basis": { "anyOf": [ { "enum": [ "reported", "derived", "estimated", "average", "point_in_time", "unknown" ], "type": "string" }, { "type": "null" } ], "default": null, "title": "Basis" }, "attributes": { "default": [], "items": { "maxLength": 128, "minLength": 12, "pattern": "^financials\\.[a-z][a-z0-9_]*$", "type": "string" }, "maxItems": 64, "title": "Attributes", "type": "array" } }, "title": "StatementCriteria", "type": "object" } }, "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "payload": { "$ref": "#/$defs/FinancialSelectionRequest" } }, "required": [ "entity_id", "payload" ], "title": "select_financial_statementArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "select_financial_statementDictOutput", "type": "object" }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `compare_financial_statements` Compare cited comparable statement versions; restatement requires explicit evidence. ```json { "name": "compare_financial_statements", "description": "Compare cited comparable statement versions; restatement requires explicit evidence.", "inputSchema": { "$defs": { "FinancialComparisonRequest": { "additionalProperties": false, "properties": { "left_statement_id": { "maxLength": 128, "minLength": 1, "title": "Left Statement Id", "type": "string" }, "right_statement_id": { "maxLength": 128, "minLength": 1, "title": "Right Statement Id", "type": "string" } }, "required": [ "left_statement_id", "right_statement_id" ], "title": "FinancialComparisonRequest", "type": "object" } }, "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "payload": { "$ref": "#/$defs/FinancialComparisonRequest" } }, "required": [ "entity_id", "payload" ], "title": "compare_financial_statementsArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "compare_financial_statementsDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_identifier_history` Read sourced identifier lifecycle and reviewed local corrections, including own retired IDs. Provider removal is not dissolution; successor evidence is not an automatic redirect. ```json { "name": "get_identifier_history", "description": "Read sourced identifier lifecycle and reviewed local corrections, including own retired IDs.\n\n Provider removal is not dissolution; successor evidence is not an automatic redirect.\n ", "inputSchema": { "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "as_of": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "As Of" }, "after_id": { "default": 0, "maximum": 2147483647, "minimum": 0, "title": "After Id", "type": "integer" }, "limit": { "default": 100, "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" } }, "required": [ "entity_id" ], "title": "get_identifier_historyArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_identifier_historyDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `compare_entity_sources` Read dated source disagreement and survivor policy without changing company facts. Stored customer/registry/authorized incumbent observations only. capture=true stores the compared evidence and requires a resolve credential. ```json { "name": "compare_entity_sources", "description": "Read dated source disagreement and survivor policy without changing company facts.\n\n Stored customer/registry/authorized incumbent observations only. capture=true\n stores the compared evidence and requires a resolve credential.\n ", "inputSchema": { "$defs": { "SourceComparisonRequest": { "additionalProperties": false, "properties": { "fields": { "items": { "type": "string" }, "maxItems": 64, "minItems": 1, "title": "Fields", "type": "array" }, "include_history": { "default": false, "title": "Include History", "type": "boolean" }, "capture": { "default": false, "title": "Capture", "type": "boolean" }, "capture_id": { "anyOf": [ { "maxLength": 64, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "type": "string" }, { "type": "null" } ], "default": null, "title": "Capture Id" } }, "required": [ "fields" ], "title": "SourceComparisonRequest", "type": "object" } }, "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "payload": { "$ref": "#/$defs/SourceComparisonRequest" } }, "required": [ "entity_id", "payload" ], "title": "compare_entity_sourcesArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "compare_entity_sourcesDictOutput", "type": "object" }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `explain_relationship_paths` Explain bounded cited paths between owned companies, including shared ancestors. Control, share ownership and consolidation remain distinct from identity. No path found does not prove no relationship. capture=true saves a receipt. ```json { "name": "explain_relationship_paths", "description": "Explain bounded cited paths between owned companies, including shared ancestors.\n\n Control, share ownership and consolidation remain distinct from identity.\n No path found does not prove no relationship. capture=true saves a receipt.\n ", "inputSchema": { "$defs": { "RelationshipRequest": { "additionalProperties": false, "properties": { "left_entity_id": { "maxLength": 64, "minLength": 1, "title": "Left Entity Id", "type": "string" }, "right_entity_id": { "maxLength": 64, "minLength": 1, "title": "Right Entity Id", "type": "string" }, "max_hops": { "default": 3, "maximum": 10, "minimum": 1, "title": "Max Hops", "type": "integer" }, "limit": { "default": 10, "maximum": 20, "minimum": 1, "title": "Limit", "type": "integer" }, "as_of": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "As Of" }, "capture": { "default": false, "title": "Capture", "type": "boolean" }, "capture_id": { "anyOf": [ { "maxLength": 64, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "type": "string" }, { "type": "null" } ], "default": null, "title": "Capture Id" } }, "required": [ "left_entity_id", "right_entity_id" ], "title": "RelationshipRequest", "type": "object" } }, "additionalProperties": false, "properties": { "payload": { "$ref": "#/$defs/RelationshipRequest" } }, "required": [ "payload" ], "title": "explain_relationship_pathsArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "explain_relationship_pathsDictOutput", "type": "object" }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `capture_data_selection` Save bounded dated company projections with source/selection policy and fingerprint. Creates a tenant-bound receipt; it changes no company facts. Entity/source-record erasure purges captures, and retrieval recomputes current redistribution rights. ```json { "name": "capture_data_selection", "description": "Save bounded dated company projections with source/selection policy and fingerprint.\n\n Creates a tenant-bound receipt; it changes no company facts. Entity/source-record\n erasure purges captures, and retrieval recomputes current redistribution rights.\n ", "inputSchema": { "$defs": { "CaptureRequest": { "additionalProperties": false, "properties": { "fields": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 64, "type": "array" }, { "type": "null" } ], "default": null, "title": "Fields" }, "field_packs": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 8, "type": "array" }, { "type": "null" } ], "default": null, "title": "Field Packs" }, "entity_ids": { "items": { "type": "string" }, "maxItems": 100, "minItems": 1, "title": "Entity Ids", "type": "array" }, "as_of": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "As Of" }, "capture_id": { "anyOf": [ { "maxLength": 64, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "type": "string" }, { "type": "null" } ], "default": null, "title": "Capture Id" } }, "required": [ "entity_ids" ], "title": "CaptureRequest", "type": "object" } }, "additionalProperties": false, "properties": { "payload": { "$ref": "#/$defs/CaptureRequest" } }, "required": [ "payload" ], "title": "capture_data_selectionArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "capture_data_selectionDictOutput", "type": "object" }, "_meta": { "resolvd": { "accepted_scopes": [ "resolve" ] } } } ``` ### `get_data_selection` Read an owned immutable data-selection capture under current caller resale rights. ```json { "name": "get_data_selection", "description": "Read an owned immutable data-selection capture under current caller resale rights.", "inputSchema": { "additionalProperties": false, "properties": { "receipt_id": { "maxLength": 64, "title": "Receipt Id", "type": "string" } }, "required": [ "receipt_id" ], "title": "get_data_selectionArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_data_selectionDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `delete_data_selection` Remove an owned saved capture; company records and decisions remain intact. ```json { "name": "delete_data_selection", "description": "Remove an owned saved capture; company records and decisions remain intact.", "inputSchema": { "additionalProperties": false, "properties": { "receipt_id": { "maxLength": 64, "title": "Receipt Id", "type": "string" } }, "required": [ "receipt_id" ], "title": "delete_data_selectionArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "delete_data_selectionDictOutput", "type": "object" }, "_meta": { "resolvd": { "accepted_scopes": [ "resolve" ] } } } ``` ### `get_entity_identity` Read portable registry anchors, dated aliases and distinct address roles, free. Public IDs are stable per official registry identifier, not a single global canonical entity ID. They confer no cross-tenant access. Subsidiaries stay separate. Missing or conflicting identity evidence is explicit. ```json { "name": "get_entity_identity", "description": "Read portable registry anchors, dated aliases and distinct address roles, free.\n\n Public IDs are stable per official registry identifier, not a single global\n canonical entity ID. They confer no cross-tenant access. Subsidiaries stay\n separate. Missing or conflicting identity evidence is explicit.\n ", "inputSchema": { "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "as_of": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "As Of" } }, "required": [ "entity_id" ], "title": "get_entity_identityArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_entity_identityDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_ownership_plan` Read bounded next steps for missing ownership evidence without executing them. Free local traversal. Accounting consolidation does not establish beneficial ownership. Suggested resolve calls are separate, normally metered operations. ```json { "name": "get_ownership_plan", "description": "Read bounded next steps for missing ownership evidence without executing them.\n\n Free local traversal. Accounting consolidation does not establish beneficial\n ownership. Suggested resolve calls are separate, normally metered operations.\n ", "inputSchema": { "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "max_hops": { "default": 3, "maximum": 10, "minimum": 1, "title": "Max Hops", "type": "integer" }, "as_of": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "As Of" } }, "required": [ "entity_id" ], "title": "get_ownership_planArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_ownership_planDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_ultimate_owner` Read organizational owner reports and bounded local controller evidence, free. Explicit source-reported ultimate owners remain separate from accounting consolidation and observed graph endpoints. Global coverage is unknown; no AI, provider lookup, resolution or persistence is performed. ```json { "name": "get_ultimate_owner", "description": "Read organizational owner reports and bounded local controller evidence, free.\n\n Explicit source-reported ultimate owners remain separate from accounting\n consolidation and observed graph endpoints. Global coverage is unknown;\n no AI, provider lookup, resolution or persistence is performed.\n ", "inputSchema": { "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "minLength": 1, "title": "Entity Id", "type": "string" }, "max_hops": { "default": 3, "maximum": 10, "minimum": 1, "title": "Max Hops", "type": "integer" }, "as_of": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "As Of" } }, "required": [ "entity_id" ], "title": "get_ultimate_ownerArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_ultimate_ownerDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_market_cap_history` Read five years of cited monthly month-end market caps, without provider spend. Returns 60 completed calendar-month buckets by default. Actual valuation, publication and capture dates stay separate. Missing, stale, conflicting or unverified closes have no selected value. Values are not forward-filled, converted between currencies or summed across incomplete share classes. ```json { "name": "get_market_cap_history", "description": "Read five years of cited monthly month-end market caps, without provider spend.\n\n Returns 60 completed calendar-month buckets by default. Actual valuation,\n publication and capture dates stay separate. Missing, stale, conflicting\n or unverified closes have no selected value. Values are not forward-filled,\n converted between currencies or summed across incomplete share classes.\n ", "inputSchema": { "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "minLength": 1, "title": "Entity Id", "type": "string" }, "months": { "default": 60, "maximum": 60, "minimum": 1, "title": "Months", "type": "integer" }, "as_of": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "As Of" }, "scope": { "default": "issuer", "enum": [ "issuer", "share_class" ], "title": "Scope", "type": "string" }, "currency": { "anyOf": [ { "pattern": "^[A-Z]{3}$", "type": "string" }, { "type": "null" } ], "default": null, "title": "Currency" }, "share_class": { "anyOf": [ { "maxLength": 2000, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Share Class" } }, "required": [ "entity_id" ], "title": "get_market_cap_historyArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_market_cap_historyDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_entity_intelligence` Read current sourced intelligence, including refreshed authorized local feeds. Free, no provider calls or writes. Field coverage, dates, scope, methodology, uncertainty and licence remain explicit. Missing observations are never zero. Discover exact fields and named packs with get_enrichment_fields; selection filters the entity's values and citations together. field_status explains unreturned fields without changing their value type. ```json { "name": "get_entity_intelligence", "description": "Read current sourced intelligence, including refreshed authorized local feeds.\n\n Free, no provider calls or writes. Field coverage, dates, scope, methodology,\n uncertainty and licence remain explicit. Missing observations are never zero.\n Discover exact fields and named packs with get_enrichment_fields; selection\n filters the entity's values and citations together. field_status explains\n unreturned fields without changing their value type.\n ", "inputSchema": { "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "fields": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 64, "type": "array" }, { "type": "null" } ], "default": null, "title": "Fields" }, "field_packs": { "anyOf": [ { "items": { "type": "string" }, "maxItems": 8, "type": "array" }, { "type": "null" } ], "default": null, "title": "Field Packs" }, "include_field_status": { "default": true, "title": "Include Field Status", "type": "boolean" } }, "required": [ "entity_id" ], "title": "get_entity_intelligenceArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_entity_intelligenceDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `search_company_reference` Find licensed, unverified company records by exact website hostname. No resolution credits or model calls. Returns every competing record up to the cap, with truncation and snapshot provenance. A domain hit is not legal validation. Do not merge candidates or claim registry confidence from it. Use resolve_company separately with the original customer input for an identity decision; a source outage is not evidence a company does not exist. ```json { "name": "search_company_reference", "description": "Find licensed, unverified company records by exact website hostname.\n\n No resolution credits or model calls. Returns every competing record up to\n the cap, with truncation and snapshot provenance. A domain hit is not legal\n validation. Do not merge candidates or claim registry confidence from it.\n Use resolve_company separately with the original customer input for an\n identity decision; a source outage is not evidence a company does not exist.\n ", "inputSchema": { "$defs": { "CompanyReferenceQuery": { "additionalProperties": false, "properties": { "domain": { "maxLength": 253, "minLength": 1, "title": "Domain", "type": "string" }, "country": { "anyOf": [ { "enum": [ "US", "GB" ], "type": "string" }, { "type": "null" } ], "default": null, "title": "Country" }, "limit": { "default": 20, "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" } }, "required": [ "domain" ], "title": "CompanyReferenceQuery", "type": "object" } }, "additionalProperties": false, "properties": { "payload": { "$ref": "#/$defs/CompanyReferenceQuery" } }, "required": [ "payload" ], "title": "search_company_referenceArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "search_company_referenceDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `lookup_company_reference_batch` Read licensed company profiles for up to 100 domains without AI or resolution. Zero resolution credits; read/resolve scope. Every original row is returned, including missing/invalid domains, outages and competing candidates. Company profiles remain unverified and dated to the source snapshot, not today. This uses only the existing company-only warehouse reader, writes no tenant entities/decisions, and cannot call models, public registries or paid vendors. One batch admission plus normal read admission for each distinct valid normalized domain/country; duplicates share a lookup within this request. At most four lookups run concurrently under a 30-second execution budget. ```json { "name": "lookup_company_reference_batch", "description": "Read licensed company profiles for up to 100 domains without AI or resolution.\n\n Zero resolution credits; read/resolve scope. Every original row is returned,\n including missing/invalid domains, outages and competing candidates. Company\n profiles remain unverified and dated to the source snapshot, not today.\n This uses only the existing company-only warehouse reader, writes no tenant\n entities/decisions, and cannot call models, public registries or paid vendors.\n One batch admission plus normal read admission for each distinct valid\n normalized domain/country; duplicates share a lookup within this request.\n At most four lookups run concurrently under a 30-second execution budget.\n ", "inputSchema": { "$defs": { "CompanyReferenceBatchItem": { "additionalProperties": false, "properties": { "client_ref": { "anyOf": [ { "maxLength": 256, "type": "string" }, { "type": "null" } ], "default": null, "title": "Client Ref" }, "domain": { "anyOf": [ { "maxLength": 2048, "type": "string" }, { "type": "null" } ], "default": null, "title": "Domain" }, "country": { "anyOf": [ { "maxLength": 32, "type": "string" }, { "type": "null" } ], "default": null, "title": "Country" } }, "title": "CompanyReferenceBatchItem", "type": "object" }, "CompanyReferenceBatchRequest": { "additionalProperties": false, "properties": { "records": { "items": { "$ref": "#/$defs/CompanyReferenceBatchItem" }, "maxItems": 100, "minItems": 1, "title": "Records", "type": "array" }, "limit": { "default": 5, "maximum": 10, "minimum": 2, "title": "Limit", "type": "integer" } }, "required": [ "records" ], "title": "CompanyReferenceBatchRequest", "type": "object" } }, "additionalProperties": false, "properties": { "payload": { "$ref": "#/$defs/CompanyReferenceBatchRequest" } }, "required": [ "payload" ], "title": "lookup_company_reference_batchArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "lookup_company_reference_batchDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `screen_entity` Screen an organization/person against installed sanctions, PEP and media evidence. Free, read-only, tenant-scoped snapshots; query/results are not retained. Missing or stale lists yield not_screened. Potential matches require review; similarity is not match probability, a risk score or a compliance decision. ```json { "name": "screen_entity", "description": "Screen an organization/person against installed sanctions, PEP and media evidence.\n\n Free, read-only, tenant-scoped snapshots; query/results are not retained.\n Missing or stale lists yield not_screened. Potential matches require review;\n similarity is not match probability, a risk score or a compliance decision.\n ", "inputSchema": { "$defs": { "ScreeningIdentifier": { "additionalProperties": false, "description": "Scheme and issuing jurisdiction are part of an identifier's meaning.", "properties": { "scheme": { "maxLength": 500, "minLength": 1, "title": "Scheme", "type": "string" }, "value": { "maxLength": 500, "minLength": 1, "title": "Value", "type": "string" }, "country": { "anyOf": [ { "maxLength": 500, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Country" } }, "required": [ "scheme", "value" ], "title": "ScreeningIdentifier", "type": "object" }, "ScreeningRequest": { "additionalProperties": false, "properties": { "name": { "maxLength": 500, "minLength": 1, "title": "Name", "type": "string" }, "subject_type": { "default": "organization", "enum": [ "organization", "person", "vessel", "aircraft", "unknown" ], "title": "Subject Type", "type": "string" }, "aliases": { "items": { "maxLength": 500, "minLength": 1, "type": "string" }, "maxItems": 20, "title": "Aliases", "type": "array" }, "identifiers": { "items": { "$ref": "#/$defs/ScreeningIdentifier" }, "maxItems": 20, "title": "Identifiers", "type": "array" }, "country": { "anyOf": [ { "maxLength": 500, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Country" }, "date_of_birth": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "Date Of Birth" }, "kinds": { "items": { "enum": [ "sanctions", "pep", "adverse_media" ], "type": "string" }, "maxItems": 3, "minItems": 1, "title": "Kinds", "type": "array" }, "sources": { "anyOf": [ { "additionalProperties": { "items": { "pattern": "^[a-z0-9][a-z0-9_-]{0,79}$", "type": "string" }, "type": "array" }, "propertyNames": { "enum": [ "sanctions", "pep", "adverse_media" ] }, "type": "object" }, { "type": "null" } ], "default": null, "title": "Sources" }, "min_name_similarity": { "default": 0.82, "maximum": 1.0, "minimum": 0.65, "title": "Min Name Similarity", "type": "number" }, "max_matches_per_kind": { "default": 20, "maximum": 100, "minimum": 1, "title": "Max Matches Per Kind", "type": "integer" } }, "required": [ "name" ], "title": "ScreeningRequest", "type": "object" } }, "additionalProperties": false, "properties": { "payload": { "$ref": "#/$defs/ScreeningRequest" } }, "required": [ "payload" ], "title": "screen_entityArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "screen_entityDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_screening_coverage` Inspect installed screening sources, versions, freshness and gaps, free. ```json { "name": "get_screening_coverage", "description": "Inspect installed screening sources, versions, freshness and gaps, free.", "inputSchema": { "additionalProperties": false, "properties": {}, "title": "get_screening_coverageArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_screening_coverageDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `watch_entity` Enable/disable a free watch of stored and local-feed intelligence; retries are safe. Requires resolve permission. Worker checks daily by default; no research or network enrichment. Register entity.intelligence_changed via REST /v1/webhooks to receive signed notifications. Changes between checks can be coalesced. ```json { "name": "watch_entity", "description": "Enable/disable a free watch of stored and local-feed intelligence; retries are safe.\n\n Requires resolve permission. Worker checks daily by default; no research or\n network enrichment. Register entity.intelligence_changed via REST /v1/webhooks\n to receive signed notifications. Changes between checks can be coalesced.\n ", "inputSchema": { "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "enabled": { "default": true, "title": "Enabled", "type": "boolean" }, "interval_seconds": { "default": 86400, "maximum": 86400, "minimum": 300, "title": "Interval Seconds", "type": "integer" } }, "required": [ "entity_id" ], "title": "watch_entityArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "watch_entityDictOutput", "type": "object" }, "annotations": { "destructiveHint": false, "idempotentHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "resolve" ] } } } ``` ### `get_entity_watch` Read an entity's watch and last successful comparison time, free. ```json { "name": "get_entity_watch", "description": "Read an entity's watch and last successful comparison time, free.", "inputSchema": { "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" } }, "required": [ "entity_id" ], "title": "get_entity_watchArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_entity_watchDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_run_room` Read your Run Room stages, accounting status and retained evidence metadata, free. Use the run_id returned by resolution to investigate progress or failures. This bounded manifest never submits work, invokes a provider or includes source document bytes. Private artifact attachments are downloaded through the authenticated REST routes or workspace. Pending metadata may be visible before record publication; artifacts require a terminal, owned record. ```json { "name": "get_run_room", "description": "Read your Run Room stages, accounting status and retained evidence metadata, free.\n\n Use the run_id returned by resolution to investigate progress or failures.\n This bounded manifest never submits work, invokes a provider or includes\n source document bytes. Private artifact attachments are downloaded through\n the authenticated REST routes or workspace. Pending metadata may be visible\n before record publication; artifacts require a terminal, owned record.\n ", "inputSchema": { "additionalProperties": false, "properties": { "run_id": { "maxLength": 64, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$", "title": "Run Id", "type": "string" } }, "required": [ "run_id" ], "title": "get_run_roomArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_run_roomDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_entity_events` Read durable watch changes after a cursor, free; values stay in intelligence. Prefer signed completion notifications to polling. Use next_cursor to resume. Categories filter the scanned page; always advance next_cursor, even when events is empty. scanned_count reports scanned events, not filtered results. Watches compare local observations; they are not an upstream event log. ```json { "name": "get_entity_events", "description": "Read durable watch changes after a cursor, free; values stay in intelligence.\n\n Prefer signed completion notifications to polling. Use next_cursor to resume.\n Categories filter the scanned page; always advance next_cursor, even when\n events is empty. scanned_count reports scanned events, not filtered results.\n Watches compare local observations; they are not an upstream event log.\n ", "inputSchema": { "$defs": { "EntityChangeCategory": { "enum": [ "identity", "identifiers", "legal_status", "location", "contact", "financials", "ownership", "firmographics", "other" ], "title": "EntityChangeCategory", "type": "string" } }, "additionalProperties": false, "properties": { "entity_id": { "maxLength": 64, "title": "Entity Id", "type": "string" }, "after_id": { "default": 0, "maximum": 2147483647, "minimum": 0, "title": "After Id", "type": "integer" }, "limit": { "default": 100, "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" }, "categories": { "anyOf": [ { "items": { "$ref": "#/$defs/EntityChangeCategory" }, "maxItems": 9, "type": "array" }, { "type": "null" } ], "default": null, "title": "Categories" } }, "required": [ "entity_id" ], "title": "get_entity_eventsArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_entity_eventsDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `get_resolution_outcomes` Read retained batch cohorts, credits, run duration, field fill and human feedback. Free. UTC dates include their final day and default to the last 30 days. Counts are original submitted records; synchronous calls only enter spend. Acceptance, sampled field fill and customer opinions are not verified accuracy. ```json { "name": "get_resolution_outcomes", "description": "Read retained batch cohorts, credits, run duration, field fill and human feedback.\n\n Free. UTC dates include their final day and default to the last 30 days.\n Counts are original submitted records; synchronous calls only enter spend.\n Acceptance, sampled field fill and customer opinions are not verified accuracy.\n ", "inputSchema": { "additionalProperties": false, "properties": { "since": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "Since" }, "until": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "default": null, "title": "Until" } }, "title": "get_resolution_outcomesArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "get_resolution_outcomesDictOutput", "type": "object" }, "annotations": { "readOnlyHint": true }, "_meta": { "resolvd": { "accepted_scopes": [ "read", "resolve" ] } } } ``` ### `submit_resolution_feedback` Record a customer's independent judgement about a named binding, free. Ask the customer for their evidence; do not label your own predictions as independent truth. Wrong reports reject this receipt's target and need no guessed replacement. Identity is unchanged. Retry the same stable key; explicit corrections append a revision using supersedes_label_id. ```json { "name": "submit_resolution_feedback", "description": "Record a customer's independent judgement about a named binding, free.\n\n Ask the customer for their evidence; do not label your own predictions as\n independent truth. Wrong reports reject this receipt's target and need no\n guessed replacement. Identity is unchanged. Retry the same stable key;\n explicit corrections append a revision using supersedes_label_id.\n ", "inputSchema": { "additionalProperties": false, "properties": { "decision_id": { "maxLength": 64, "minLength": 1, "title": "Decision Id", "type": "string" }, "report": { "enum": [ "correct", "wrong" ], "title": "Report", "type": "string" }, "rationale": { "maxLength": 4000, "minLength": 1, "title": "Rationale", "type": "string" }, "idempotency_key": { "maxLength": 200, "minLength": 1, "title": "Idempotency Key", "type": "string" }, "source_uri": { "anyOf": [ { "maxLength": 2000, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Source Uri" }, "supersedes_label_id": { "anyOf": [ { "maxLength": 64, "minLength": 1, "type": "string" }, { "type": "null" } ], "default": null, "title": "Supersedes Label Id" } }, "required": [ "decision_id", "report", "rationale", "idempotency_key" ], "title": "submit_resolution_feedbackArguments", "type": "object" }, "outputSchema": { "additionalProperties": true, "title": "submit_resolution_feedbackDictOutput", "type": "object" }, "annotations": { "readOnlyHint": false, "destructiveHint": false, "idempotentHint": true, "openWorldHint": false }, "_meta": { "resolvd": { "accepted_scopes": [ "resolve" ] } } } ```