Dated evidence: an authenticated request to the hosted catalog returned HTTP 404 on 2026-09-14T01:46:46.905Z. Later releases deployed the generic command routes: production version
6b10560e (deployed 2026-09-20T16:54:01.875157Z from commit 732cadc) serves 125 authenticated commands according to its source and release receipt. Read GET /v1/commands with your credential before depending on a command. See capability status and release evidence.| Method and path | Shared operation | Status | Resource-route differences |
|---|---|---|---|
GET /v1/commands | HTTP transport/account | 200 | Authenticated command index: name, toolset, tier, read or write, one-line summary, scopes, scope authorization, aliases, confirmation class and availability for every command, plus the toolset list. ?include=schemas returns the full definitions with input and output schemas; any other query parameter is refused. |
GET /v1/catalog.json | HTTP transport/account | 200 | The catalog snapshot the CLI bundles: every command with toolset, tier, aliases, keywords, scopes, schemas and availability, the MCP view URLs and the client view table. Carries an ETag and a private one-hour cache; If-None-Match answers 304. ?format=anthropic-tools returns the same commands as an Anthropic Messages API tool array for programmatic tool calling: every tool deferred (defer_loading), callable from the code execution tool and directly (allowed_callers), never strict; execute them against POST /v1/commands/{name}. |
GET /v1/tasks/{taskId} | HTTP transport/account | 200 | Read a check job (job_ or tjb_ id) or a verification batch (cvb_ id) as a task: taskId, status (working, completed, failed, cancelled), ttl, createdAt, lastUpdatedAt, pollInterval, statusMessage and the underlying record as result. The same view MCP tasks/get returns to a task-requesting client. |
GET /v1/commands/{name} | HTTP transport/account | 200 | Describe one command: toolset, tier, read or write, scopes and whether this credential holds them, description, input and output schemas, annotations, examples, aliases, availability, and how to run it on REST, the CLI and MCP. A retired name resolves to its canonical command and the response says so. Unknown names answer 404 TOOL_NOT_FOUND with a next hint. |
POST /v1/commands/{name} | HTTP transport/account | 200 | All command arguments in JSON body; query parameters and Idempotency-Key header are refused. Success is HTTP 200, including queued jobs. |
GET /v1/workspaces | HTTP transport/account | 200 | Human session; lists memberships without workspace selection. |
POST /v1/workspaces | HTTP transport/account | 201 | Human session; JSON name creates a workspace. |
POST /v1/invitations/accept | HTTP transport/account | 201 | Human session; JSON token; accepting identity needs a verified matching email. Does not require prior membership. |
GET /v1/access | HTTP transport/account | 200 | Human owner/admin; returns keys and grants metadata, at most 100 each. |
POST /v1/access/keys | HTTP transport/account | 201 | Human session; creates a scoped API credential within the creator permission ceiling and returns secret once. |
DELETE /v1/access/keys/{id} | HTTP transport/account | 200 | Human owner/admin; returns {id,revoked:true}. |
DELETE /v1/access/grants/{id} | HTTP transport/account | 200 | Human owner/admin; returns {id,revoked:true}. |
GET /v1/workspace | get_workspace | 200 | Resource response adds access:{role,scopes,project_ids} alongside workspace information. |
GET /v1/usage | get_usage | 200 | Remaining read arguments go in query parameters. |
GET /v1/workspace/events | list_workspace_events | 200 | Remaining read arguments go in query parameters. |
GET /v1/projects | list_projects | 200 | Remaining read arguments go in query parameters. |
POST /v1/projects | create_project | 201 | Remaining arguments go in a JSON object body. |
GET /v1/projects/{projectId} | get_project | 200 | Remaining read arguments go in query parameters. |
GET /v1/watches | list_link_watches | 200 | Remaining read arguments go in query parameters. |
POST /v1/watches | monitor_link | 201 | Remaining arguments go in a JSON object body. |
POST /v1/watches/import | import_link_watches | 201 | Remaining arguments go in a JSON object body. |
GET /v1/watches/{watchId} | get_link_watch | 200 | Remaining read arguments go in query parameters. |
PATCH /v1/watches/{watchId} | update_link_watch | 200 | Remaining arguments go in a JSON object body. |
GET /v1/watches/{watchId}/history | get_history | 200 | Remaining read arguments go in query parameters. |
GET /v1/watches/{watchId}/contacts | get_public_contacts | 200 | Remaining read arguments go in query parameters. |
POST /v1/watches/{watchId}/recheck | request_check | 202 | Remaining arguments go in a JSON object body. Supply idempotencyKey as the Idempotency-Key header on this resource route. |
GET /v1/jobs | list_check_jobs | 200 | Remaining read arguments go in query parameters. |
GET /v1/jobs/{jobId} | get_check_job | 200 | Remaining read arguments go in query parameters. |
GET /v1/events | list_events | 200 | Remaining read arguments go in query parameters. |
GET /v1/exports/watches | export_link_watches | 200 | Remaining read arguments go in query parameters. |
GET /v1/library/opportunities | list_opportunities | 200 | Remaining read arguments go in query parameters. |
GET /v1/library/opportunities/export | export_opportunities | 200 | Remaining read arguments go in query parameters. The answer is the same JSON envelope as the command; the exported text is its content field. |
GET /v1/library/opportunities/{recordId} | get_opportunity | 200 | No query parameters are accepted. |
GET /v1/observations/{observationId}/locate | locate_link | 200 | Remaining read arguments go in query parameters. |
GET /v1/observations/{observationId}/evidence | get_evidence | 200 | Returns raw evidence JSON as an attachment with Content-Disposition, Cache-Control: no-store and restrictive CSP. HTTP 410 EVIDENCE_EXPIRED when bytes expire. The generic command uses its documented response object. |
GET /v1/reports/links | get_link_reports | 200 | Remaining read arguments go in query parameters. |
GET /v1/reports/profile | get_link_profile | 200 | Remaining read arguments go in query parameters. |
GET /v1/reports/anchors | get_anchor_report | 200 | Remaining read arguments go in query parameters. |
GET /v1/targets | list_targets | 200 | Remaining read arguments go in query parameters. |
POST /v1/targets | monitor_target | 201 | Remaining arguments go in a JSON object body. |
GET /v1/targets/{targetId} | get_target | 200 | Remaining read arguments go in query parameters. |
PATCH /v1/targets/{targetId} | update_target | 200 | Remaining arguments go in a JSON object body. |
GET /v1/targets/{targetId}/history | get_history | 200 | Remaining read arguments go in query parameters. |
GET /v1/targets/{targetId}/placements | get_target_placements | 200 | Remaining read arguments go in query parameters. |
POST /v1/targets/{targetId}/recheck | request_check | 202 | Remaining arguments go in a JSON object body. Supply idempotencyKey as the Idempotency-Key header on this resource route. |
GET /v1/target-jobs/{jobId} | get_check_job | 200 | Remaining read arguments go in query parameters. |
GET /v1/target-events | list_events | 200 | Remaining read arguments go in query parameters. |
GET /v1/target-observations/{observationId}/evidence | get_evidence | 200 | Returns raw evidence JSON as an attachment with Content-Disposition, Cache-Control: no-store and restrictive CSP. HTTP 410 EVIDENCE_EXPIRED when bytes expire. The generic command uses its documented response object. |
POST /v1/discovery/imports | import_backlinks | 201 | Remaining arguments go in a JSON object body. Supply idempotencyKey as the Idempotency-Key header on this resource route. |
GET /v1/discovery/runs | list_discovery_runs | 200 | Remaining read arguments go in query parameters. |
POST /v1/discovery/runs | discover_backlinks | 202 | Remaining arguments go in a JSON object body. Supply idempotencyKey as the Idempotency-Key header on this resource route. |
GET /v1/discovery/runs/{runId} | get_discovery_run | 200 | Remaining read arguments go in query parameters. |
GET /v1/discovery/runs/{runId}/candidates | list_discovery_candidates | 200 | Remaining read arguments go in query parameters. |
POST /v1/discovery/overviews | request_domain_overview | 202 | Remaining arguments go in a JSON object body. Supply idempotencyKey as the Idempotency-Key header on this resource route. |
GET /v1/discovery/overviews/{runId} | get_domain_overview | 200 | Remaining read arguments go in query parameters. |
POST /v1/discovery/runs/{runId}/candidates/{candidateId}/verify | verify_discovery_candidate | 202 | Remaining arguments go in a JSON object body. Supply idempotencyKey as the Idempotency-Key header on this resource route. |
GET /v1/discovery/verifications/{jobId} | get_candidate_verification | 200 | Remaining read arguments go in query parameters. |
POST /v1/discovery/runs/{runId}/verification-batches | verify_discovery_candidates | 202 | Remaining arguments go in a JSON object body. Supply idempotencyKey as the Idempotency-Key header on this resource route. Returns 202 for pending batches and 200 otherwise. |
GET /v1/discovery/verification-batches/{batchId} | get_candidate_verification_batch | 200 | Remaining read arguments go in query parameters. |
POST /v1/discovery/verifications/{jobId}/monitor | monitor_discovery_candidate | 200 | Remaining arguments go in a JSON object body. Supply idempotencyKey as the Idempotency-Key header on this resource route. |
POST /v1/competitor-sets | create_competitor_set | 201 | Remaining arguments go in a JSON object body. |
GET /v1/competitor-sets | list_competitor_sets | 200 | Remaining read arguments go in query parameters. |
GET /v1/competitor-sets/{setId} | get_competitor_set | 200 | Remaining read arguments go in query parameters. |
PATCH /v1/competitor-sets/{setId} | update_competitor_set | 200 | Remaining arguments go in a JSON object body. |
DELETE /v1/competitor-sets/{setId} | retire_competitor_set | 200 | Remaining arguments go in a JSON object body. |
POST /v1/competitor-sets/{setId}/runs | request_competitor_inventory | 202 | Remaining arguments go in a JSON object body. Supply idempotencyKey as the Idempotency-Key header on this resource route. |
POST /v1/competitor-inventories | capture_competitor_inventory | 201 | Remaining arguments go in a JSON object body. |
GET /v1/competitor-sets/{setId}/inventories | list_competitor_inventories | 200 | Remaining read arguments go in query parameters. |
GET /v1/competitor-inventories/{inventoryId}/rows | list_competitor_inventory_rows | 200 | Remaining read arguments go in query parameters. |
POST /v1/competitor-sets/{setId}/gap-report | get_competitor_gap_report | 200 | Remaining arguments go in a JSON object body. |
POST /v1/competitor-sets/{setId}/domain-mix | get_domain_mix_report | 200 | Remaining arguments go in a JSON object body. |
GET /v1/competitor-sets/{setId}/exclusions | get_competitor_exclusions | 200 | Remaining read arguments go in query parameters. |
PUT /v1/competitor-sets/{setId}/exclusions | save_competitor_exclusions | 201 | Remaining arguments go in a JSON object body. |
POST /v1/competitor-sets/{setId}/exclusions/preview | preview_competitor_exclusions | 200 | Remaining arguments go in a JSON object body. |
GET /v1/competitor-sets/{setId}/refresh | get_competitor_refresh | 200 | Remaining read arguments go in query parameters. |
PUT /v1/competitor-sets/{setId}/refresh | configure_competitor_refresh | 200 | Remaining arguments go in a JSON object body. |
PATCH /v1/competitor-sets/{setId}/refresh | set_competitor_refresh_paused | 200 | Remaining arguments go in a JSON object body. |
GET /v1/members | list_members | 200 | Remaining read arguments go in query parameters. |
PATCH /v1/members/{userId} | set_member_access | 200 | Remaining arguments go in a JSON object body. |
DELETE /v1/members/{userId} | remove_member | 200 | Remaining arguments go in a JSON object body. |
GET /v1/invitations | list_invitations | 200 | Remaining read arguments go in query parameters. |
POST /v1/invitations | invite_member | 201 | Remaining arguments go in a JSON object body. |
DELETE /v1/invitations/{invitationId} | revoke_invitation | 200 | Remaining arguments go in a JSON object body. |
GET /v1/webhooks | list_webhooks | 200 | Remaining read arguments go in query parameters. |
POST /v1/webhooks | create_webhook | 201 | Remaining arguments go in a JSON object body. |
GET /v1/webhooks/{endpointId}/deliveries | list_webhook_deliveries | 200 | Remaining read arguments go in query parameters. |
POST /v1/webhooks/{endpointId}/secrets | rotate_webhook_secret | 201 | Remaining arguments go in a JSON object body. Empty or unreadable body is treated as {} by this resource handler; use {retire:true} to retire the older secret. |
PATCH /v1/webhooks/{endpointId} | set_webhook_state | 200 | Remaining arguments go in a JSON object body. |
DELETE /v1/webhooks/{endpointId} | delete_webhook | 200 | Remaining arguments go in a JSON object body. |
GET /v1/search-connections | list_search_connections | 200 | Required projectId goes in the query. Returns provider availability and public connection state. |
GET /v1/search-connections/{connectionId}/rows | list_search_connection_rows | 200 | Optional limit and opaque cursor go in the query. Reads stored provider rows with collection coverage. |
POST /v1/search-connections/{connectionId}/sync | sync_search_connection | 200 | Send a JSON object. Omit continue for a fresh collection; continue:true requests the next available Bing provider batch. Does not start monitoring. |
POST /v1/search-connections/{connectionId}/import | import_search_connection_rows | 200 | Send rowIds and idempotencyKey in the JSON body. Imports selected saved Bing rows as unchecked discovery candidates; repeat the same request key when retrying. |
POST /v1/search-connections/start | HTTP transport/account | 200 | Signed-in workspace owner or administrator with discovery:write. Returns the provider sign-in URL and sets an HttpOnly browser-binding cookie; the browser completes consent. |
GET /v1/search-connections/{connectionId}/properties | HTTP transport/account | 200 | Signed-in workspace owner or administrator with discovery:read. Lists properties accessible to the connected provider account. |
PUT /v1/search-connections/{connectionId}/property | HTTP transport/account | 200 | Signed-in workspace owner or administrator with discovery:write. Selects an accessible property covering the project and clears the previous saved rows. |
POST /v1/search-connections/{connectionId}/disconnect | HTTP transport/account | 200 | Signed-in workspace owner or administrator with discovery:write. Send an empty JSON object. Erases local provider credentials and retains saved results. |
DELETE /v1/search-connections/{connectionId} | HTTP transport/account | 200 | Signed-in workspace owner or administrator with discovery:write. Send confirmation exactly as forget connection followed by a space and this connectionId. Removes the connection and saved provider rows. |
GET /v1/citation-events | list_events | 200 | Reads the citation feed only; remaining read arguments go in query parameters. |
GET /v1/citation-epochs | list_citation_epochs | 200 | Reads current citation epoch summaries; does not start measurement. |
preview_resource_deletion and delete_resource use the generic command endpoint. They have no additional resource-route alias. Anonymous checks use POST /free/check and GET /free/check/{resultId}; their quotas and result retention are separate from authenticated commands. GET /healthz is a public process-health probe. GET /config exposes the selected environment’s public client configuration and capability flags.
Check the selected environment and workspace access before calling hosted operations. See capability status.