Cowdidocs
API ReferenceStatements

Download a statement document

GET
/v1/statements/{id}/documents/{format}

Returns the download view of one rendition: its status and, when ready and still within its retention window, a short-lived presigned link. A ready rendition past its retention window reports an EXPIRED failure code with no link; request the statement again to regenerate it. Not available while impersonating the caller. Requires an authenticated, active user. Returns 404 when the statement does not exist, does not belong to the caller, or format is not one of the statement's renditions.

AuthorizationBearer <token>

Create a client with POST /v1/oauth/clients, then exchange its credentials for an access token. AUTHORIZATION_CODE clients act on behalf of a signed-in user and always use PKCE; CLIENT_CREDENTIALS clients act as themselves. A client may only be granted scopes its creator already holds — read the grantable list from GET /v1/oauth/clients/scopes.

In: header

Path Parameters

id*string

Unique identifier of the statement.

Formatuuid
format*string

Rendition format, case-insensitive.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/statements/3fa85f64-5717-4562-b3fc-2c963f66afa6/documents/PDF"
{  "format": "CSV",  "status": "PENDING",  "size_bytes": 0,  "sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",  "failure_reason": "[TOO_MANY_ROWS] The statement has more rows than the CSV export supports.",  "failure_code": "TOO_MANY_ROWS",  "expires_at": "2026-04-15T00:00:00Z",  "href": "https://cowdi-statements.s3.amazonaws.com/statements/3fa85f64.pdf?X-Amz-Signature=...",  "href_expires_at": "2026-01-15T09:35:00Z"}
{  "code": "BAD_REQUEST",  "description": "Bad Request"}
{  "code": "UNAUTHORISED",  "description": "Unauthorised"}
{  "code": "FORBIDDEN",  "description": "Forbidden"}
{  "code": "BAD_REQUEST",  "description": "Invalid input"}
{  "code": "RATE_LIMIT_EXCEEDED",  "description": "Too Many Requests"}
{  "code": "INTERNAL_ERROR",  "description": "Internal Server Error"}