curl --request GET \
--url https://api.watchdog.no/v1/invoices \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.watchdog.no/v1/invoices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.watchdog.no/v1/invoices"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"invoices": [
{
"invoice_id": "7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb",
"invoice_number": "100234",
"duplicate_of_invoice_id": null,
"processing": {
"status": "completed",
"classification": "invoice",
"failure": null
},
"alerts": {
"processing": {
"status": "completed",
"skip_reason": null,
"failure": null
},
"result": "no_alerts_found",
"count": 0,
"resolution": null
},
"invoice_url": "https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb",
"created_at": "2026-08-12T07:44:20.000Z"
}
],
"next_cursor": null
}{
"error": {
"code": "validation_error",
"message": "<string>",
"request_id": "<string>",
"description": "<string>"
}
}{
"error": {
"code": "invalid_token",
"message": "<string>",
"request_id": "<string>",
"description": "<string>"
}
}{
"error": {
"code": "token_disabled",
"message": "<string>",
"request_id": "<string>",
"description": "<string>"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "<string>",
"request_id": "<string>",
"description": "<string>"
}
}{
"error": {
"code": "internal_error",
"message": "<string>",
"request_id": "<string>",
"description": "<string>"
}
}{
"error": {
"code": "service_unavailable",
"message": "<string>",
"request_id": "<string>",
"description": "<string>"
}
}List invoices
Lists every non-deleted invoice belonging to the token organization, regardless of import source.
This operational listing includes accepted uploads quarantined as semantic duplicates. Those resources expose duplicate_of_invoice_id and do not represent additional financial invoices.
Results default to newest first. Use sort and direction to choose an allowlisted order. Pass next_cursor as cursor to continue; omitted sorting parameters are inherited from the cursor, while contradictory parameters return 400.
Cursors are opaque and remain usable if the invoice at the preceding page boundary is deleted.
Each item is the same invoice resource returned by GET /v1/invoices/{invoice_id}. Open invoice_url in Watchdog for details and alert review.
curl --request GET \
--url https://api.watchdog.no/v1/invoices \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.watchdog.no/v1/invoices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.watchdog.no/v1/invoices"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"invoices": [
{
"invoice_id": "7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb",
"invoice_number": "100234",
"duplicate_of_invoice_id": null,
"processing": {
"status": "completed",
"classification": "invoice",
"failure": null
},
"alerts": {
"processing": {
"status": "completed",
"skip_reason": null,
"failure": null
},
"result": "no_alerts_found",
"count": 0,
"resolution": null
},
"invoice_url": "https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb",
"created_at": "2026-08-12T07:44:20.000Z"
}
],
"next_cursor": null
}{
"error": {
"code": "validation_error",
"message": "<string>",
"request_id": "<string>",
"description": "<string>"
}
}{
"error": {
"code": "invalid_token",
"message": "<string>",
"request_id": "<string>",
"description": "<string>"
}
}{
"error": {
"code": "token_disabled",
"message": "<string>",
"request_id": "<string>",
"description": "<string>"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "<string>",
"request_id": "<string>",
"description": "<string>"
}
}{
"error": {
"code": "internal_error",
"message": "<string>",
"request_id": "<string>",
"description": "<string>"
}
}{
"error": {
"code": "service_unavailable",
"message": "<string>",
"request_id": "<string>",
"description": "<string>"
}
}Authorizations
Personal API key from Settings → Personal → API keys. Send X-Organization-Id with the target organization. Plaintext is shown once at creation and cannot be recovered. Header: Authorization: Bearer wdg_<token>.
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 invoices to return. Defaults to 50 and cannot exceed 100.
1 <= x <= 10050
Opaque continuation cursor from the preceding response. It retains the selected sort and direction.
1 - 512"eyJ2IjoxLCJyZXNvdXJjZSI6Imludm9pY2VzIiwic29ydCI6ImNyZWF0ZWRfYXQiLCJkaXJlY3Rpb24iOiJkZXNjIiwic29ydF92YWx1ZSI6IjE3ODY0NjM5NjAwNjEwMDAiLCJpZCI6IjdhZDJjNTBkLTJjYzAtNDlhMC05YTljLTZmYTgxN2MxZmJjYiJ9"
Field used to order invoices. Defaults to created_at for an initial request and is inherited from the cursor on continuation.
created_at "created_at"
Sort direction. Defaults to desc for an initial request and is inherited from the cursor on continuation.
asc, desc "desc"