Account CLI API
Alpha. Deploy the compatible API before installing the coordinated alpha CLI release.
Use account CLI OAuth to manage resources across your current workspace memberships. It is independent of the application SDK, project setup authorization and .env files. The CLI reference provides terminal workflows and exit codes.
Authorization
Code example
seamward login --read-onlyseamward workspaces list --jsonseamward workspaces use acmeseamward connections verify int_example --workspace acme --jsonThe CLI registers a public native client with software_id: seamward-management-cli, uses the OAuth device grant and requests offline_access. Browser consent shows the exact permissions and requires a verified account. The resource audience is https://seamward.com/api/cli. Access tokens last 15 minutes. A refresh requires the same current consent; replacing or revoking consent invalidates the old grant. Account login does not select an environment or grant collector credential operations.
Workspace requests require these headers:
Code example
Authorization: Bearer <account CLI access token>X-Seamward-Workspace: acmeAccount identity, workspace listing and current-client revocation do not require the workspace header. An active current membership is checked on every workspace request. Viewers can read only; owner/admin writes also require the exact OAuth scope. Scopes use the prefix seamward:cli: followed by integrations:read, integrations:manage, contracts:read, contracts:write, contracts:activate, observations:read, incidents:read, repairs:read, repairs:create, repairs:approve, repairs:export, or replays:read.
The hosted CLI trusts the Seamward console/API origin pair. It does not send an account token to an arbitrary --api-url. Tokens for setup, ingestion, remote MCP, another resource or a revoked client cannot authorize this API. Management tokens cannot issue, rotate, recover, verify secret pairs, or export collector credentials. Use dashboard credential setup for Live and install its pair directly in hosting secrets.
Repair export requires the separate repairs:export scope and current owner/admin membership. Read-only grants and viewers cannot export executable bundles.
Account endpoints
| Endpoint | Response |
|---|---|
GET /v1/cli/me | schemaVersion: 1, safe user: {id, name}, and granted scopes |
GET /v1/cli/workspaces | items: [{id, slug, name, role}], nextCursor |
GET /v1/cli/sessions | Owned CLI client metadata, current flag and nextCursor; no tokens |
DELETE /v1/cli/sessions/{clientId} | Revokes only an owned CLI client; foreign client returns 404 |
DELETE /v1/cli/session | revoked: true; disables this client and revokes consent, access and refresh tokens |
Workspace listing accepts limit from 1 to 100 (default 25) and optional cursor, the last organization ID returned as nextCursor. Unknown query fields are rejected. The response includes active workspaces where the user is an owner, admin or viewer, including when there is no saved workspace selection.
Example identity response:
Code example
{ "schemaVersion": 1, "user": { "id": "usr_example", "name": "Example operator" }, "scopes": ["seamward:cli:integrations:read"]}Session lists accept the same bounded limit and cursor rules. To retire a lost terminal login, run seamward login on another trusted device, seamward sessions list, then seamward sessions revoke CLIENT_ID. No workspace is required. Revocation is audited in current workspaces.
Logout revokes the current client, not every account session. Operation receipts stay retained but another client cannot claim them. A local-only logout leaves remote authorization valid until revoked or expired.
Evidence endpoints
Every connection path is bound to the selected workspace's exact canonical int_... connection. The response mode is derived from that connection, never from a separate mode selector.
| Endpoint | Scope suffix | Response |
|---|---|---|
GET /v1/cli/connections/{connectionId}/verify | observations:read | Credential status and evidence metadata |
GET /v1/cli/connections/{connectionId}/incidents | incidents:read | Mode, incident items, opaque nextCursor |
GET /v1/cli/connections/{connectionId}/incidents/{id} | incidents:read | Redacted incident detail |
GET /v1/cli/connections/{connectionId}/repair-proposals/{id} | repairs:read | Proposal status, validation and decision metadata |
GET /v1/cli/connections/{connectionId}/incidents/{incidentId}/repair-proposals | repairs:read | Proposal items and nextCursor |
GET /v1/cli/connections/{connectionId}/incidents/{incidentId}/replay-datasets | replays:read | Dataset items and nextCursor |
GET /v1/cli/connections/{connectionId}/replay-datasets/{datasetId} | replays:read | Dataset metadata, no fixtures |
GET /v1/cli/connections/{connectionId}/replay-runs/{runId} | replays:read | Run metadata, no executable inputs or raw results |
Verification returns:
Code example
{ "connectionId": "int_example", "mode": "sandbox", "credentialStatus": "active", "activeContractVersionId": null, "hasObservations": false, "latestObservedAt": null}credentialStatus is active, revoked, or missing. hasObservations and latest time describe stored evidence; no traffic is sent. An active credential does not prove that the application has installed it.
Lists accept limit from 1 to 100 (default 25) and optional opaque cursor. Incident lists also accept status: open | resolved. Cursor ownership includes workspace, exact connection, incident where relevant, and filters. Reusing a cursor in another scope returns 400. Empty pages return an empty array and null cursor.
Dataset metadata contains id, incidentId, connectionId, mode, manifestHash, fixtureCount, redactionPolicyVersion, and ISO createdAt. Proposal list items contain IDs, status, nullable dataset and validation-run IDs, created/updated times and a sanitized error code. Run metadata contains run/dataset/connection IDs, mode, status, adapter version/fingerprint, nullable sanitized error code, and queued/started/finished times.
Observation endpoints also accept CLI OAuth, but require the exact integrationId query parameter. Contract endpoints bind their connection ID in the path. Neither can use an omitted connection to obtain workspace-wide evidence.
Reviewed repairs
| Endpoint | Scope suffix | Body |
|---|---|---|
POST /v1/cli/connections/{connectionId}/incidents/{incidentId}/repair-proposals | repairs:create | {} or an exact datasetId |
POST /v1/cli/connections/{connectionId}/repair-proposals/{proposalId}/decision-preview | repairs:approve | decision and rationale |
POST /v1/cli/operations/{operationId}/apply | repairs:approve | Exact preview approvalFingerprint |
GET /v1/cli/operations/{operationId} | Original action scope | Preview, expired preview, or retained completion receipt |
POST /v1/cli/connections/{connectionId}/repair-proposals/{proposalId}/export | repairs:export | {} |
Request, decision-preview and export admission are each capped at 20 new operations per workspace and 5 new operations per actor per UTC minute. New repair generation additionally allows 10 in-progress proposals per workspace and only one in-progress proposal per incident. A 429 includes Retry-After and creates no receipt. Completed request/export retries recover their original result even after the worker or connection becomes unavailable.
Repair request, apply and export require Idempotency-Key: a printable 8 to 128 character string retained for retries. Decision preview does not mutate the proposal. It expires after ten minutes and binds current authorization, candidate, validation, replay, and source-patch fingerprints. Apply rechecks those exact facts and commits the reviewer decision, immutable approval, audit and completion receipt together.
A request queues the existing repair worker and returns HTTP 202. Its frozen replay dataset comes from the incident's observations, and compatible findings must be linked to those observations. An optional datasetId must identify the same exact workspace, incident, connection and frozen observation set. Repair capacity and generation configuration are required. Arbitrary replay adapters, source code and network execution are not accepted.
Decision request:
Code example
{ "decision": "approved", "rationale": "Reviewed candidate and validated replay against intended behavior."}decision is approved or rejected. rationale is trimmed and must contain 10 to 1000 characters. Only proposals awaiting approval with a valid candidate and passed replay can be decided. Repository-bound proposals also require a source-patch artifact.
Preview fields are schemaVersion: 1, operationId, connectionId, proposalId, status: previewed, approvalFingerprint, expiresAt, and review. The review includes decision/rationale, proposal status/fingerprint, nullable validation, patch fingerprint and repository mapping ID. Validation contains report ID, valid/replay booleans, run ID/status, adapter fingerprint and schema-check fingerprint.
Apply request, using the exact fingerprint returned by preview:
Code example
{ "approvalFingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}Completed request receipt:
Code example
{ "schemaVersion": 1, "operationId": "cliop_example", "action": "repair.request", "targetId": "inc_example", "connectionId": "int_example", "status": "completed", "data": { "proposalId": "rep_example", "datasetId": "rds_example", "status": "queued" }, "completedAt": "2026-10-01T08:00:00.000Z", "replayed": false}A decision receipt changes action to repair.decision, targetId to the proposal and data to {proposalId, status: approved | rejected, approvalRecordId}. An export receipt uses repair.export and returns a seamward-repair-export/1 bundle with filename, fingerprint, and three files: repair.json, REPAIR.md, and repair.ts. Each has media type, SHA-256 and content. Reviewer identity is omitted from CLI exports; the immutable internal approval remains available for audit.
Exports require an approved, fingerprint-matching and validated candidate. Export does not edit the project, create a pull request, or deploy code. Review and test the generated adapter yourself.
Existing management APIs
CLI OAuth also authorizes the safe management routes documented under workspaces and contracts: Integration inventory/detail, connection metadata, modes, contract registration/activation, reconciliation rules, reviewed configuration copy/compensation, and reviewed connection or whole-Integration deletion. Use the exact scope and body from those references with X-Seamward-Workspace. Existing revision and idempotency controls still apply. CLI OAuth is deliberately denied on credential, Integration creation and mode-connection setup surfaces that could issue secrets.
Errors and recovery
Errors contain a stable error code. Responses never include access, refresh or ingest tokens.
| Status | Codes | Recovery |
|---|---|---|
| 400 | workspace_required, connection_required, invalid_cli_query, invalid_cli_session_query, invalid_workspace_query, invalid_incident_query, invalid_evidence_query, invalid_evidence_cursor, invalid_incident_cursor, invalid_repair_request, idempotency_key_required | Correct the explicit target, body, pagination or key |
| 401 | unauthenticated | Run account login and review new consent |
| 403 | insufficient_scope, cli_operation_forbidden, authorization_changed | Check current membership and scopes; secret operations require dashboard setup |
| 404 | workspace_not_found, connection_not_found, incident_not_found, repair_proposal_not_found, replay_dataset_not_found, replay_run_not_found, operation_not_found, cli_session_not_found | Check the exact workspace, connection and original client |
| 409 | idempotency_conflict, approval_mismatch, review_expired, review_stale, repair_proposal_not_approvable, repair_source_patch_required, repair_export_not_available, repair_export_not_approved, repair_export_not_validated, repair_export_fingerprint_mismatch, repair_export_operation_unsupported, repair_export_sensitive_content, incident_has_no_repair_assertion, repair_evidence_unavailable, replay_evidence_unavailable, replay_evidence_capacity_exceeded, replay_evidence_snapshot_changed | Recover the original outcome or review current evidence again |
| 429 | workload_rate_limited, repair_capacity_exceeded | Wait and retry the same request/key |
| 503 | repair_generator_unavailable, mode_cutover_write_paused | Wait for service recovery; keep the original key |
On a lost response, read the operation status or repeat the exact request with its original key. Changed payloads with that key conflict. Another user, client or authorization epoch cannot claim the receipt. Deleted connections retain completed receipts. Archive or membership removal withdraws CLI workspace access.
Next: CLI command reference, contract API, or configuration and credential APIs.
Endpoint examples
These examples follow the published machine contracts. Account tokens authorize management only.
Read account CLI identity
GET /v1/cli/me
Authorization: account CLI OAuth. No workspace selection is required.
Path parameters
No path parameters.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request GET "https://api.seamward.com/v1/cli/me" \ --header 'Authorization: Bearer <account CLI access token>'Response: HTTP 200
Code example
{ "schemaVersion": 1, "user": { "id": "usr_example", "name": "Example operator" }, "scopes": ["seamward:cli:integrations:read"]}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
List current account workspaces
GET /v1/cli/workspaces
Authorization: account CLI OAuth. No workspace selection is required.
Path parameters
No path parameters.
Query parameters
limit: 1 to 100, default 25.cursor: unchanged nextCursor from the preceding scoped page.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request GET "https://api.seamward.com/v1/cli/workspaces" \ --header 'Authorization: Bearer <account CLI access token>'Response: HTTP 200
Code example
{ "items": [ { "id": "org_example", "slug": "acme", "name": "Acme", "role": "owner" } ], "nextCursor": null}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 400 | invalid_workspace_query | invalid workspace query. Correct the request or recover the retained operation before retrying. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
List owned CLI authorizations
GET /v1/cli/sessions
Authorization: account CLI OAuth. No workspace selection is required.
Path parameters
No path parameters.
Query parameters
limit: 1 to 100, default 25.cursor: unchanged nextCursor from the preceding scoped page.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request GET "https://api.seamward.com/v1/cli/sessions" \ --header 'Authorization: Bearer <account CLI access token>'Response: HTTP 200
Code example
{ "items": [], "nextCursor": null}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 400 | invalid_cli_session_query | invalid cli session query. Correct the request or recover the retained operation before retrying. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
Revoke an owned CLI authorization
DELETE /v1/cli/sessions/{clientId}
Authorization: account CLI OAuth. No workspace selection is required.
Path parameters
clientId: exact owned CLI client ID. Copy it from the preceding list or operation response.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request DELETE "https://api.seamward.com/v1/cli/sessions/${CLIENT_ID}" \ --header 'Authorization: Bearer <account CLI access token>'Response: HTTP 200
Code example
{ "revoked": true}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 404 | cli_session_not_found | cli session not found. Correct the request or recover the retained operation before retrying. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
Revoke this CLI client
DELETE /v1/cli/session
Authorization: account CLI OAuth. No workspace selection is required.
Path parameters
No path parameters.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request DELETE "https://api.seamward.com/v1/cli/session" \ --header 'Authorization: Bearer <account CLI access token>'Response: HTTP 200
Code example
{ "revoked": true}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
Verify exact connection evidence
GET /v1/cli/connections/{connectionId}/verify
Authorization: account CLI OAuth, requiring seamward:cli:observations:read. Current workspace membership and the workspace header are required.
Path parameters
connectionId: exact connection ID. Copy it from the preceding list or operation response.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request GET "https://api.seamward.com/v1/cli/connections/${CONNECTION_ID}/verify" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme'Response: HTTP 200
Code example
{ "connectionId": "int_example", "mode": "sandbox", "credentialStatus": "active", "activeContractVersionId": null, "hasObservations": false, "latestObservedAt": null}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
List exact connection incidents
GET /v1/cli/connections/{connectionId}/incidents
Authorization: account CLI OAuth, requiring seamward:cli:incidents:read. Current workspace membership and the workspace header are required.
Path parameters
connectionId: exact connection ID. Copy it from the preceding list or operation response.
Query parameters
limit: 1 to 100, default 25.cursor: unchanged nextCursor from the preceding scoped page.status: open or resolved.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request GET "https://api.seamward.com/v1/cli/connections/${CONNECTION_ID}/incidents" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme'Response: HTTP 200
Code example
{ "mode": "sandbox", "items": [ { "id": "inc_example", "connectionId": "int_example", "mode": "sandbox", "environmentId": "env_sandbox", "kind": "schema-drift", "status": "open", "summary": "The observed response schema changed.", "affectedRecords": 1, "resolutionState": "active", "firstObservedAt": "2026-09-29T06:00:00.000Z", "lastObservedAt": "2026-09-29T06:00:00.000Z", "createdAt": "2026-09-29T06:00:00.000Z", "updatedAt": "2026-09-29T06:00:00.000Z", "resolvedAt": null } ], "nextCursor": null}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 400 | invalid_incident_query | invalid incident query. Correct the request or recover the retained operation before retrying. |
| 400 | invalid_incident_cursor | invalid incident cursor. Correct the request or recover the retained operation before retrying. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
Read exact connection incident
GET /v1/cli/connections/{connectionId}/incidents/{id}
Authorization: account CLI OAuth, requiring seamward:cli:incidents:read. Current workspace membership and the workspace header are required.
Path parameters
connectionId: exact connection ID. Copy it from the preceding list or operation response.id: exact resource ID. Copy it from the preceding list or operation response.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request GET "https://api.seamward.com/v1/cli/connections/${CONNECTION_ID}/incidents/${ID}" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme'Response: HTTP 200
Code example
{ "incident": { "id": "inc_example", "connectionId": "int_example", "mode": "sandbox", "environmentId": "env_sandbox", "kind": "schema-drift", "status": "open", "summary": "The observed response schema changed.", "affectedRecords": 1, "resolutionState": "active", "firstObservedAt": "2026-09-29T06:00:00.000Z", "lastObservedAt": "2026-09-29T06:00:00.000Z", "createdAt": "2026-09-29T06:00:00.000Z", "updatedAt": "2026-09-29T06:00:00.000Z", "resolvedAt": null, "findings": [], "observationIds": [], "evidenceTruncated": false }}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 404 | incident_not_found | incident not found. Correct the request or recover the retained operation before retrying. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
Read exact connection repair proposal
GET /v1/cli/connections/{connectionId}/repair-proposals/{id}
Authorization: account CLI OAuth, requiring seamward:cli:repairs:read. Current workspace membership and the workspace header are required.
Path parameters
connectionId: exact connection ID. Copy it from the preceding list or operation response.id: exact resource ID. Copy it from the preceding list or operation response.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request GET "https://api.seamward.com/v1/cli/connections/${CONNECTION_ID}/repair-proposals/${ID}" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme'Response: HTTP 200
Code example
{ "proposal": { "id": "rep_example", "incidentId": "inc_example", "connectionId": "int_example", "mode": "sandbox", "environmentId": "env_sandbox", "status": "queued", "createdAt": "2026-09-29T06:00:00.000Z", "updatedAt": "2026-09-29T06:00:00.000Z", "errorCode": null, "validation": null, "decision": null }}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 404 | repair_proposal_not_found | repair proposal not found. Correct the request or recover the retained operation before retrying. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
List incident repair proposals
GET /v1/cli/connections/{connectionId}/incidents/{incidentId}/repair-proposals
Authorization: account CLI OAuth, requiring seamward:cli:repairs:read. Current workspace membership and the workspace header are required.
Path parameters
connectionId: exact connection ID. Copy it from the preceding list or operation response.incidentId: exact resource ID. Copy it from the preceding list or operation response.
Query parameters
limit: 1 to 100, default 25.cursor: unchanged nextCursor from the preceding scoped page.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request GET "https://api.seamward.com/v1/cli/connections/${CONNECTION_ID}/incidents/${INCIDENT_ID}/repair-proposals" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme'Response: HTTP 200
Code example
{ "items": [], "nextCursor": null}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 400 | invalid_evidence_query | invalid evidence query. Correct the request or recover the retained operation before retrying. |
| 400 | invalid_evidence_cursor | invalid evidence cursor. Correct the request or recover the retained operation before retrying. |
| 404 | incident_not_found | incident not found. Correct the request or recover the retained operation before retrying. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
List incident replay datasets
GET /v1/cli/connections/{connectionId}/incidents/{incidentId}/replay-datasets
Authorization: account CLI OAuth, requiring seamward:cli:replays:read. Current workspace membership and the workspace header are required.
Path parameters
connectionId: exact connection ID. Copy it from the preceding list or operation response.incidentId: exact resource ID. Copy it from the preceding list or operation response.
Query parameters
limit: 1 to 100, default 25.cursor: unchanged nextCursor from the preceding scoped page.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request GET "https://api.seamward.com/v1/cli/connections/${CONNECTION_ID}/incidents/${INCIDENT_ID}/replay-datasets" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme'Response: HTTP 200
Code example
{ "items": [ { "id": "rds_example", "incidentId": "inc_example", "connectionId": "int_example", "mode": "sandbox", "manifestHash": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "fixtureCount": 1, "redactionPolicyVersion": "1", "createdAt": "2026-10-01T08:00:00.000Z" } ], "nextCursor": null}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 400 | invalid_evidence_query | invalid evidence query. Correct the request or recover the retained operation before retrying. |
| 400 | invalid_evidence_cursor | invalid evidence cursor. Correct the request or recover the retained operation before retrying. |
| 404 | incident_not_found | incident not found. Correct the request or recover the retained operation before retrying. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
Read replay dataset metadata
GET /v1/cli/connections/{connectionId}/replay-datasets/{datasetId}
Authorization: account CLI OAuth, requiring seamward:cli:replays:read. Current workspace membership and the workspace header are required.
Path parameters
connectionId: exact connection ID. Copy it from the preceding list or operation response.datasetId: exact resource ID. Copy it from the preceding list or operation response.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request GET "https://api.seamward.com/v1/cli/connections/${CONNECTION_ID}/replay-datasets/${DATASET_ID}" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme'Response: HTTP 200
Code example
{ "dataset": { "id": "rds_example", "incidentId": "inc_example", "connectionId": "int_example", "mode": "sandbox", "manifestHash": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "fixtureCount": 1, "redactionPolicyVersion": "1", "createdAt": "2026-10-01T08:00:00.000Z" }}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 404 | replay_dataset_not_found | replay dataset not found. Correct the request or recover the retained operation before retrying. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
Read replay run metadata
GET /v1/cli/connections/{connectionId}/replay-runs/{runId}
Authorization: account CLI OAuth, requiring seamward:cli:replays:read. Current workspace membership and the workspace header are required.
Path parameters
connectionId: exact connection ID. Copy it from the preceding list or operation response.runId: exact resource ID. Copy it from the preceding list or operation response.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request GET "https://api.seamward.com/v1/cli/connections/${CONNECTION_ID}/replay-runs/${RUN_ID}" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme'Response: HTTP 200
Code example
{ "run": { "id": "rrun_example", "datasetId": "rds_example", "connectionId": "int_example", "mode": "sandbox", "status": "passed", "adapterFingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "adapterVersion": "repair:rep_example", "errorCode": null, "queuedAt": "2026-10-01T08:00:00.000Z", "startedAt": "2026-10-01T08:00:00.000Z", "finishedAt": "2026-10-01T08:00:00.000Z" }}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 404 | replay_run_not_found | replay run not found. Correct the request or recover the retained operation before retrying. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
Request an evidence-bound repair
POST /v1/cli/connections/{connectionId}/incidents/{incidentId}/repair-proposals
Authorization: account CLI OAuth, requiring seamward:cli:repairs:create. Current workspace membership and the workspace header are required.
Path parameters
connectionId: exact connection ID. Copy it from the preceding list or operation response.incidentId: exact resource ID. Copy it from the preceding list or operation response.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request POST "https://api.seamward.com/v1/cli/connections/${CONNECTION_ID}/incidents/${INCIDENT_ID}/repair-proposals" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme' \ --header 'Idempotency-Key: <original idempotency key>' \ --header 'Content-Type: application/json' \ --data '{}'Request body:
Code example
{}Response: HTTP 202
Code example
{ "schemaVersion": 1, "operationId": "cliop_example", "action": "repair.request", "targetId": "inc_example", "connectionId": "int_example", "status": "completed", "data": { "proposalId": "rep_example", "datasetId": "rds_example", "status": "queued" }, "completedAt": "2026-10-01T08:00:00.000Z", "replayed": false}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 400 | invalid_repair_request | The body contains invalid or unexpected fields. |
| 400 | idempotency_key_required | Mutation requires a printable 8 to 128 character key. |
| 409 | idempotency_conflict | A retained mutation key was used with another request. |
| 403 | authorization_changed | The operation belongs to an earlier authorization or membership revision. |
| 404 | incident_not_found | incident not found. Correct the request or recover the retained operation before retrying. |
| 409 | incident_has_no_repair_assertion | incident has no repair assertion. Correct the request or recover the retained operation before retrying. |
| 503 | repair_generator_unavailable | The repair worker is unavailable. |
| 409 | repair_evidence_unavailable | No compatible findings are linked to the frozen incident observations. |
| 409 | replay_evidence_unavailable | The incident's frozen observations are unavailable. |
| 409 | replay_evidence_capacity_exceeded | replay evidence capacity exceeded. Correct the request or recover the retained operation before retrying. |
| 409 | replay_evidence_snapshot_changed | replay evidence snapshot changed. Correct the request or recover the retained operation before retrying. |
| 404 | replay_dataset_not_found | replay dataset not found. Correct the request or recover the retained operation before retrying. |
| 409 | repair_already_pending | repair already pending. Correct the request or recover the retained operation before retrying. |
| 429 | repair_capacity_exceeded | repair capacity exceeded. Correct the request or recover the retained operation before retrying. |
| 429 | workload_rate_limited | 20 new operations per workspace or 5 new operations per actor per UTC minute. Retry after the Retry-After seconds header. No receipt is created. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
Preview a repair decision
POST /v1/cli/connections/{connectionId}/repair-proposals/{proposalId}/decision-preview
Authorization: account CLI OAuth, requiring seamward:cli:repairs:approve. Current workspace membership and the workspace header are required.
Path parameters
connectionId: exact connection ID. Copy it from the preceding list or operation response.proposalId: exact resource ID. Copy it from the preceding list or operation response.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request POST "https://api.seamward.com/v1/cli/connections/${CONNECTION_ID}/repair-proposals/${PROPOSAL_ID}/decision-preview" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme' \ --header 'Content-Type: application/json' \ --data '{"decision":"approved","rationale":"Reviewed candidate and validated replay against intended behavior."}'Request body:
Code example
{ "decision": "approved", "rationale": "Reviewed candidate and validated replay against intended behavior."}Response: HTTP 201
Code example
{ "schemaVersion": 1, "operationId": "cliop_review", "connectionId": "int_example", "proposalId": "rep_example", "status": "previewed", "approvalFingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "expiresAt": "2026-10-01T08:10:00.000Z", "review": { "proposalId": "rep_example", "connectionId": "int_example", "status": "awaiting_approval", "proposalFingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "validation": { "id": "val_example", "valid": true, "replayPassed": true, "replayRunId": "rrun_example", "replayStatus": "passed", "adapterFingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "schemaChecksFingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" }, "patchArtifactFingerprint": null, "repositoryMappingId": null, "decision": "approved", "rationale": "Reviewed candidate and validated replay against intended behavior." }}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 400 | invalid_repair_request | The body contains invalid or unexpected fields. |
| 404 | repair_proposal_not_found | repair proposal not found. Correct the request or recover the retained operation before retrying. |
| 409 | repair_proposal_not_approvable | The candidate is not awaiting approval with successful validation. |
| 409 | repair_source_patch_required | repair source patch required. Correct the request or recover the retained operation before retrying. |
| 403 | authorization_changed | The operation belongs to an earlier authorization or membership revision. |
| 429 | workload_rate_limited | 20 new operations per workspace or 5 new operations per actor per UTC minute. Retry after the Retry-After seconds header. No receipt is created. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
Apply the reviewed repair decision
POST /v1/cli/operations/{operationId}/apply
Authorization: account CLI OAuth, requiring seamward:cli:repairs:approve. Current workspace membership and the workspace header are required.
Path parameters
operationId: exact operation ID. Copy it from the preceding list or operation response.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request POST "https://api.seamward.com/v1/cli/operations/${OPERATION_ID}/apply" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme' \ --header 'Idempotency-Key: <original idempotency key>' \ --header 'Content-Type: application/json' \ --data '{"approvalFingerprint":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}'Request body:
Code example
{ "approvalFingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}Response: HTTP 200
Code example
{ "schemaVersion": 1, "operationId": "cliop_example", "action": "repair.decision", "targetId": "rep_example", "connectionId": "int_example", "status": "completed", "data": { "proposalId": "rep_example", "status": "approved", "approvalRecordId": "apr_example" }, "completedAt": "2026-10-01T08:00:00.000Z", "replayed": false}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 400 | invalid_repair_request | The body contains invalid or unexpected fields. |
| 400 | idempotency_key_required | Mutation requires a printable 8 to 128 character key. |
| 404 | operation_not_found | The operation is absent or owned by another client or actor. |
| 409 | approval_mismatch | The apply fingerprint does not match the preview. |
| 403 | authorization_changed | The operation belongs to an earlier authorization or membership revision. |
| 409 | idempotency_conflict | A retained mutation key was used with another request. |
| 409 | review_expired | A decision preview expired after ten minutes. |
| 409 | review_stale | The reviewed proposal or validation changed. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
Read this client's operation status
GET /v1/cli/operations/{operationId}
Authorization: account CLI OAuth. Current workspace membership and the workspace header are required.
Path parameters
operationId: exact operation ID. Copy it from the preceding list or operation response.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request GET "https://api.seamward.com/v1/cli/operations/${OPERATION_ID}" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme'Response: HTTP 200
Code example
{ "schemaVersion": 1, "operationId": "cliop_example", "action": "repair.request", "targetId": "inc_example", "connectionId": "int_example", "status": "completed", "data": { "proposalId": "rep_example", "datasetId": "rds_example", "status": "queued" }, "completedAt": "2026-10-01T08:00:00.000Z", "replayed": false}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 404 | operation_not_found | The operation is absent or owned by another client or actor. |
| 403 | authorization_changed | The operation belongs to an earlier authorization or membership revision. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
Export an approved repair
POST /v1/cli/connections/{connectionId}/repair-proposals/{proposalId}/export
Authorization: account CLI OAuth, requiring seamward:cli:repairs:export. Current workspace membership and the workspace header are required.
Path parameters
connectionId: exact connection ID. Copy it from the preceding list or operation response.proposalId: exact resource ID. Copy it from the preceding list or operation response.
Query parameters
No query parameters. Unknown fields return invalid_cli_query.
Request example
Set resource-ID variables to IDs returned by your own preceding requests. Replace the account-token placeholder through your OAuth client; it is not a collector credential.
Code example
curl --request POST "https://api.seamward.com/v1/cli/connections/${CONNECTION_ID}/repair-proposals/${PROPOSAL_ID}/export" \ --header 'Authorization: Bearer <account CLI access token>' \ --header 'X-Seamward-Workspace: acme' \ --header 'Idempotency-Key: <original idempotency key>' \ --header 'Content-Type: application/json' \ --data '{}'Request body:
Code example
{}Response: HTTP 200
Code example
{ "schemaVersion": 1, "operationId": "cliop_example", "action": "repair.export", "targetId": "rep_example", "connectionId": "int_example", "status": "completed", "data": { "schemaVersion": "seamward-repair-export/1", "filename": "seamward-repair-rep_example.json", "fingerprint": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "files": [ { "path": "repair.json", "mediaType": "application/json", "sha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "content": "{}\n" }, { "path": "REPAIR.md", "mediaType": "text/markdown", "sha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "content": "# Reviewed repair\n" }, { "path": "repair.ts", "mediaType": "text/typescript", "sha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "content": "export {};\n" } ] }, "completedAt": "2026-10-01T08:00:00.000Z", "replayed": false}Errors and recovery
| Status | Code | Cause and recovery |
|---|---|---|
| 401 | unauthenticated | Missing, expired or revoked account CLI authorization, including a replaced consent. |
| 400 | invalid_cli_query | invalid cli query. Correct the request or recover the retained operation before retrying. |
| 403 | insufficient_scope | The grant or current membership does not permit this operation. |
| 400 | workspace_required | A workspace operation lacks a valid X-Seamward-Workspace slug. |
| 404 | workspace_not_found | No active workspace membership exists. |
| 404 | connection_not_found | The exact canonical connection is absent or belongs to another workspace. |
| 400 | invalid_repair_request | The body contains invalid or unexpected fields. |
| 400 | idempotency_key_required | Mutation requires a printable 8 to 128 character key. |
| 409 | idempotency_conflict | A retained mutation key was used with another request. |
| 403 | authorization_changed | The operation belongs to an earlier authorization or membership revision. |
| 404 | repair_proposal_not_found | repair proposal not found. Correct the request or recover the retained operation before retrying. |
| 409 | repair_export_not_available | repair export not available. Correct the request or recover the retained operation before retrying. |
| 409 | repair_export_not_approved | repair export not approved. Correct the request or recover the retained operation before retrying. |
| 409 | repair_export_not_validated | repair export not validated. Correct the request or recover the retained operation before retrying. |
| 409 | repair_export_fingerprint_mismatch | repair export fingerprint mismatch. Correct the request or recover the retained operation before retrying. |
| 409 | repair_export_operation_unsupported | repair export operation unsupported. Correct the request or recover the retained operation before retrying. |
| 409 | repair_export_sensitive_content | repair export sensitive content. Correct the request or recover the retained operation before retrying. |
| 429 | workload_rate_limited | 20 new operations per workspace or 5 new operations per actor per UTC minute. Retry after the Retry-After seconds header. No receipt is created. |
| 503 | mode_cutover_write_paused | A reviewed mode cutover has paused database writes, including authentication record updates. Retry the same request with the same idempotency key after the Retry-After interval. The response contains Retry-After: 1; it does not mean the cutover will finish in one second. |
| 400 | invalid_request | A JSON request body cannot be parsed. |
| 413 | request_too_large | A request body exceeds the 1 MiB API limit. |
