curl --request GET \
--url http://localhost:3500/v1/invoices/imports \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('http://localhost:3500/v1/invoices/imports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "http://localhost:3500/v1/invoices/imports"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "queued",
"origin": "upload",
"supersedes_invoice": true,
"deleted_at": "2023-11-07T05:31:56Z",
"primary_document": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"file_name": "<string>",
"mime_type": "<string>",
"file_size": 123,
"page_count": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"version": 123,
"previous_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"source_count": 1,
"attachment_count": 1,
"retryable": true,
"provenance": {
"uploader": {
"user_id": "<string>",
"name": "<string>"
},
"api_key": {
"name": "<string>"
},
"email": {
"sender": "<string>",
"name": "<string>"
},
"integration": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"type": "<string>"
}
},
"classification_reason": "<string>",
"outcome": "imported",
"invoice_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflow_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflow_run_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"failure": {
"code": "<string>",
"message": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"next_cursor": "<string>",
"total": 123,
"failed_retryable_count": 123,
"has_ingestion": true
}{
"error": {
"code": "validation_error",
"message": "Invalid request format, parameters, or body. Details contain up to 20 actionable field errors; the complete encoded request body must be at most 2 MiB (2,097,152 bytes).",
"request_id": "req_example"
}
}{
"error": {
"code": "invalid_token",
"message": "Missing or invalid bearer credential.",
"request_id": "req_example"
}
}{
"error": {
"code": "forbidden",
"message": "Access denied: forbidden, token_disabled, organization_required, insufficient_role, or mfa_required. Check the error code and effective permissions.",
"request_id": "req_example"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "The IP or authenticated credential exceeded its request limit.",
"request_id": "req_example"
}
}{
"error": {
"code": "internal_error",
"message": "Unexpected server failure. Include the request ID when contacting support.",
"request_id": "req_example"
}
}{
"error": {
"code": "service_unavailable",
"message": "Authentication infrastructure is unavailable or rate limited. Honor Retry-After when provided.",
"request_id": "req_example"
}
}List invoice imports
Lists processing attempts by import, optionally filtered by current status. has_ingestion is organization-wide and independent of filters or pagination, including retained legacy invoices and invoice Documents. For onboarding after an empty invoice list, request limit=1; an empty Import page alone does not prove nothing was uploaded.
curl --request GET \
--url http://localhost:3500/v1/invoices/imports \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('http://localhost:3500/v1/invoices/imports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "http://localhost:3500/v1/invoices/imports"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "queued",
"origin": "upload",
"supersedes_invoice": true,
"deleted_at": "2023-11-07T05:31:56Z",
"primary_document": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"file_name": "<string>",
"mime_type": "<string>",
"file_size": 123,
"page_count": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"version": 123,
"previous_version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"source_count": 1,
"attachment_count": 1,
"retryable": true,
"provenance": {
"uploader": {
"user_id": "<string>",
"name": "<string>"
},
"api_key": {
"name": "<string>"
},
"email": {
"sender": "<string>",
"name": "<string>"
},
"integration": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"type": "<string>"
}
},
"classification_reason": "<string>",
"outcome": "imported",
"invoice_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflow_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflow_run_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"failure": {
"code": "<string>",
"message": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"next_cursor": "<string>",
"total": 123,
"failed_retryable_count": 123,
"has_ingestion": true
}{
"error": {
"code": "validation_error",
"message": "Invalid request format, parameters, or body. Details contain up to 20 actionable field errors; the complete encoded request body must be at most 2 MiB (2,097,152 bytes).",
"request_id": "req_example"
}
}{
"error": {
"code": "invalid_token",
"message": "Missing or invalid bearer credential.",
"request_id": "req_example"
}
}{
"error": {
"code": "forbidden",
"message": "Access denied: forbidden, token_disabled, organization_required, insufficient_role, or mfa_required. Check the error code and effective permissions.",
"request_id": "req_example"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "The IP or authenticated credential exceeded its request limit.",
"request_id": "req_example"
}
}{
"error": {
"code": "internal_error",
"message": "Unexpected server failure. Include the request ID when contacting support.",
"request_id": "req_example"
}
}{
"error": {
"code": "service_unavailable",
"message": "Authentication infrastructure is unavailable or rate limited. Honor Retry-After when provided.",
"request_id": "req_example"
}
}Authorizations
Personal API key. Send X-Organization-Id. The required cumulative level is listed in x-watchdog-permission.
Headers
Required for personal API keys. Target one organization you have access to. Migrated keys may omit it to use their original organization. For Clerk sessions, it must match the active organization.
Query Parameters
Maximum number of results per page.
1 <= x <= 100Opaque next_cursor from the previous page. Keep the same filters and sort; omit for the first page.
409640004000How the source entered: upload, api, email or integration.
40002552727created_at, updated_at, primary_file_name asc, desc true, false Response
A page of import summaries; next_cursor is null at the end.
100Show child attributes
Show child attributes
Organization-wide presence of retained Imports, invoice rows of any status (including deleted legacy rows), or invoice-category Documents. Independent of status filters and pagination. An empty data page can still have has_ingestion=true. Permanent removal of all evidence cannot prove past uploads.