curl --request GET \
--url https://api.watchdog.no/v1/alerts/export \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.watchdog.no/v1/alerts/export', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.watchdog.no/v1/alerts/export"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)<string>{
"error": {
"code": "validation_error",
"message": "The request is invalid. details lists up to 20 field errors. Request bodies are limited to 2 MiB.",
"request_id": "req_example"
}
}{
"error": {
"code": "invalid_token",
"message": "The bearer token is missing or invalid.",
"request_id": "req_example"
}
}{
"error": {
"code": "forbidden",
"message": "Access denied. The error code says why: forbidden, token_disabled, organization_required, insufficient_role or mfa_required.",
"request_id": "req_example"
}
}{
"error": {
"code": "not_found",
"message": "The resource does not exist in the current organization.",
"request_id": "req_example"
}
}{
"error": {
"code": "conflict",
"message": "One or more selected teams have invalid saved filter rules. Update the team filters before retrying.",
"request_id": "req_example"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests. Wait for the Retry-After delay before retrying.",
"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": "Temporarily unavailable. Retry after the Retry-After delay, when provided.",
"request_id": "req_example"
}
}Export selected alerts
Exports every alert matching the list filters as CSV or XLSX, newest first. The CSV is streamed; if the download breaks off, request it again.
curl --request GET \
--url https://api.watchdog.no/v1/alerts/export \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.watchdog.no/v1/alerts/export', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.watchdog.no/v1/alerts/export"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)<string>{
"error": {
"code": "validation_error",
"message": "The request is invalid. details lists up to 20 field errors. Request bodies are limited to 2 MiB.",
"request_id": "req_example"
}
}{
"error": {
"code": "invalid_token",
"message": "The bearer token is missing or invalid.",
"request_id": "req_example"
}
}{
"error": {
"code": "forbidden",
"message": "Access denied. The error code says why: forbidden, token_disabled, organization_required, insufficient_role or mfa_required.",
"request_id": "req_example"
}
}{
"error": {
"code": "not_found",
"message": "The resource does not exist in the current organization.",
"request_id": "req_example"
}
}{
"error": {
"code": "conflict",
"message": "One or more selected teams have invalid saved filter rules. Update the team filters before retrying.",
"request_id": "req_example"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests. Wait for the Retry-After delay before retrying.",
"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": "Temporarily unavailable. Retry after the Retry-After delay, when provided.",
"request_id": "req_example"
}
}Authorizations
Personal API key sent as a bearer token, together with X-Organization-Id. The key must have at least the access level the endpoint requires (read, write or admin).
Headers
The organization to act in. Required for personal API keys; list the organizations you can access with GET /v1/organizations.
Query Parameters
Only records matched by the filters of teams you belong to. Teams combine with OR; other filters combine with AND. Cannot be combined with team_ids.
true, false Only records matched by the filters of these teams: at most 50, comma-separated in a query string or an array in a JSON body. Teams combine with OR. Unknown teams return 404.
Match alerts in any of these claims; null matches alerts in no claim.
Use false to select alerts that are not currently attached to any claim.
true, false Match alerts whose current claim has any of these statuses: pending, in_progress, completed, cancelled.
Combine invoice, agreement, supplier, recipient and topic ID filters with AND (default) or OR. Tenant, validity, search and other filters always apply.
and, or is, is_not is, is_not is, is_not is, is_not is, is_not Comma-separated, at most 50 values.
Comma-separated, at most 50 values.
Match alerts whose agreement has any of these statuses: draft, active, archived.
Comma-separated, at most 50 values.
Comma-separated, at most 50 values.
Comma-separated, at most 50 values.
Match alerts in any selected topic; null matches uncategorized alerts.
Use false to select uncategorized alerts.
true, false Match alerts with any of these verdicts, whatever their credit: pending, accepted, dismissed. pending means no decision yet.
Match alerts with or without a credit, regardless of verdict.
true, false Match credit provenance: credit_note, user. null selects alerts without a credit.
Match any listed confidence level: certain, uncertain. null matches alerts without one.
Comma-separated, at most 50 values.
Match any of these correction types: modify_item, modify_invoice, add_item.
true matches alerts whose agreement or invoice changed after the check that found them; false matches alerts whose inputs are unchanged. Alerts that do not record what they assessed match neither.
true, false live (default) returns alerts that count; invalidated returns alerts that stopped counting, for example because their invoice no longer matches the agreement. Alerts in claims named by claim_ids are included either way.
live, invalidated, all Minimum impact in the organization currency, inclusive. Alerts without an impact never match.
100^-?\d+(?:\.\d+)?$Maximum impact in the organization currency, inclusive. Alerts without an impact never match.
100^-?\d+(?:\.\d+)?$Invoice issued on or after this date.
^\d{4}-\d{2}-\d{2}$Invoice issued on or before this date.
^\d{4}-\d{2}-\d{2}$Created on or after this calendar date in the organization's timezone.
^\d{4}-\d{2}-\d{2}$Created on or before this calendar date in the organization's timezone.
^\d{4}-\d{2}-\d{2}$Case-insensitive search across alert, invoice, supplier, agreement and topic text. A UUID matches the alert, invoice, supplier or agreement ID.
1 - 200xlsx adds a Topics sheet with the topics of the exported alerts.
csv, xlsx Response
The export file. Content type follows format.
The response is of type file.