Request format
#Use the endpoint's documented method and path under /api/v1. Searchly project and resource IDs are UUIDs; provider resource identifiers use their provider-specific schemas.
JSON writes require Content-Type: application/json. Unknown fields and duplicate query parameters are rejected. If an operation requires an empty JSON body, send {}. If it accepts no body, omit it.
Bodies are limited to 1 MiB, including streamed bodies. Individual fields and arrays have their own bounds. Use the endpoint reference for required fields, defaults, and accepted values.
Response format
#Successful authenticated resource JSON responses wrap the operation's result in data and return meta.requestId. The request ID also appears in X-Request-Id. Responses are not cached and do not set session cookies. Public discovery (GET /api/v1) and the OpenAPI document (GET /api/v1/openapi.json) return bare JSON without data or meta.
Resource shapes differ by operation: project creation returns data.brand.id, content creation returns data.contentId, and a document read returns data.document. Reports can contain their own inner data field.
CSV answer export is a text/csv attachment and does not use the JSON envelope. Check the endpoint's content type before parsing a response.
Replay identities and uncertain outcomes
#Only operations whose schema includes requestId provide their service's replay protection. These include content creation, source addition, generation, and manual prompt submission. Generate one UUID for that operation, and keep both the UUID and payload when retrying it. A conflicting payload under the same identity is rejected.
An arbitrary Idempotency-Key header is not supported. Project creation and other writes without requestId do not acquire generic idempotency guarantees. If a response is lost, read the resource state before deciding to repeat a write.
For revisions and approval conflicts, read current state and reconcile the change before retrying. See content editing and publishing.