curl --request POST \
--url https://api.watchdog.no/v1/integrations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"provider": "tripletex",
"name": "<string>",
"credentials": {}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({provider: 'tripletex', name: '<string>', credentials: {}})
};
fetch('https://api.watchdog.no/v1/integrations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.watchdog.no/v1/integrations"
payload = {
"provider": "tripletex",
"name": "<string>",
"credentials": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"provider": "<string>",
"name": "<string>",
"status": "connected",
"syncable": true,
"enabled": true,
"auto_sync": true,
"capture": {
"enabled": true,
"cadence": "daily",
"timezone": "<string>",
"last_captured_at": "2023-11-07T05:31:56Z"
},
"scope": {
"suppliers": {
"mode": "all",
"items": [
{
"id": "<string>",
"name": "<string>",
"code": "<string>",
"group": {
"kind": "vendor-sites",
"prefixes": [
"<string>"
],
"site_count": 123,
"inactive_site_count": 1
}
}
],
"include_unidentified": true
},
"companies": [
{
"id": "<string>",
"name": "<string>",
"country_code": "<string>",
"accounting_currency_code": "<string>"
}
],
"processing_statuses": [
"<string>"
],
"module_company_codes": {
"costinvoice": [
"<string>"
],
"purchaseorder": [
"<string>"
]
}
},
"credentials": {
"values": {},
"secrets_set": [
"<string>"
]
},
"realtime": {
"supported": true,
"status": "active"
},
"rate_limited_until": "2023-11-07T05:31:56Z",
"last_successful_sync": {
"started_at": "2023-11-07T05:31:56Z",
"trigger": "manual"
},
"active_sync_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"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": "conflict",
"message": "The name is taken for this provider, or this organization already has a connection for its SFTP adapter.",
"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"
}
}Create an integration
Saves a connection for a provider whose connection method is credentials. It starts as not_tested and enabled, with auto_sync off; nothing is sent to the provider until it is tested or synced. Test unsaved credentials first with POST /v1/integrations/test.
curl --request POST \
--url https://api.watchdog.no/v1/integrations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"provider": "tripletex",
"name": "<string>",
"credentials": {}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({provider: 'tripletex', name: '<string>', credentials: {}})
};
fetch('https://api.watchdog.no/v1/integrations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.watchdog.no/v1/integrations"
payload = {
"provider": "tripletex",
"name": "<string>",
"credentials": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"provider": "<string>",
"name": "<string>",
"status": "connected",
"syncable": true,
"enabled": true,
"auto_sync": true,
"capture": {
"enabled": true,
"cadence": "daily",
"timezone": "<string>",
"last_captured_at": "2023-11-07T05:31:56Z"
},
"scope": {
"suppliers": {
"mode": "all",
"items": [
{
"id": "<string>",
"name": "<string>",
"code": "<string>",
"group": {
"kind": "vendor-sites",
"prefixes": [
"<string>"
],
"site_count": 123,
"inactive_site_count": 1
}
}
],
"include_unidentified": true
},
"companies": [
{
"id": "<string>",
"name": "<string>",
"country_code": "<string>",
"accounting_currency_code": "<string>"
}
],
"processing_statuses": [
"<string>"
],
"module_company_codes": {
"costinvoice": [
"<string>"
],
"purchaseorder": [
"<string>"
]
}
},
"credentials": {
"values": {},
"secrets_set": [
"<string>"
]
},
"realtime": {
"supported": true,
"status": "active"
},
"rate_limited_until": "2023-11-07T05:31:56Z",
"last_successful_sync": {
"started_at": "2023-11-07T05:31:56Z",
"trigger": "manual"
},
"active_sync_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"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": "conflict",
"message": "The name is taken for this provider, or this organization already has a connection for its SFTP adapter.",
"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.
Body
Response
The resource.
Result of the latest test or sync. not_tested until the first test.
connected, invalid_credentials, permission_denied, server_error, not_tested Enabled and in a status that allows a sync to start.
Automatic invoice import: after capture for SFTP, otherwise nightly and through supported webhooks.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Secret values are never returned.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The provider asked Watchdog to pause requests until this time.
Latest sync that completed with full coverage.
Show child attributes
Show child attributes