Docs menu: Connections
Connections
A merchant's credentials for one provider, in one mode.
Retrieve a connection #
/api/v1/connections/{id}Returns one of your connections in your key's mode, without its credentials.
- Bearer API key
Path parameters
idstringrequiredThe connection's id (con_…).
Request
curlcurl -X GET 'https://tallio.dev/api/v1/connections/con_02y9O8rh7F50tGi0QcWRrx' \
-H "Authorization: Bearer $TALLIO_API_KEY"| Status | Description |
|---|---|
200 | The connection. |
| 4XX, 5XX | An error: see Errors below. |
Response body · 200
dataobjectrequiredA merchant's credentials for one provider in one mode. The credentials themselves are never returned.
Show nested fields (9)Hide nested fields (9)
idstringrequiredId of the connection (con_…).
Show patternHide pattern
^con_[0-9A-Za-z]{22}$objectstringrequiredAlways "connection".
Always
connectionmerchantstringrequiredThe merchant this connection belongs to (mer_…).
Show patternHide pattern
^mer_[0-9A-Za-z]{22}$providerstringrequiredThe licensed e-invoicing provider (or direct myDATA, or Tallio's sandbox) that issues the document.
One of:
sandbox,mydata,wrapp,impact,epsilon,softone,prosvasismodestringrequiredlive for a connection made with a live key, test for a test key.
One of:
live,teststatusstringrequiredactive (documents can be routed to it), invalid (the provider refused its credentials; fix and verify again), disconnected (no longer used; its credentials are deleted 30 days later).
One of:
active,invalid,disconnectedverified_atstring | nullrequiredWhen the provider last accepted its credentials; null until then.
Format:
date-timelast_errorobject | nullrequiredWhy the provider last refused it; null otherwise.
Show nested fields (6)Hide nested fields (6)
codestringrequiredStable machine-readable error code. Branch on this, never on
message.One of:
validation_failed,unauthorized,not_found,idempotency_conflict,idempotency_in_progress,already_exists,payload_too_large,unsupported_media_type,rate_limited,not_supported,provider_rejected,provider_unavailable,service_unavailable,internal_errormessagestringrequiredHuman-readable explanation, safe to show to a developer.
provider_codestring | nullrequiredThe provider's own error code, or null when the error did not come from a provider.
provider_messagestring | nullrequiredThe provider's own error message, verbatim, or null when the error did not come from a provider.
retryablebooleanrequiredTrue when the same request may succeed if sent again later.
provider_rawanyThe provider's error response body as received, or a TruncatedProviderRaw marker when it exceeds 4096 bytes of JSON. Never holds request headers, credentials or the request payload.
createdstringrequiredWhen the connection was created.
Format:
date-time
Example response · 200{
"data": {
"id": "con_02y9O8rh7F50tGi0QcWRrx",
"object": "connection",
"merchant": "mer_02y9O8rh7F50tGi0QcWRrx",
"provider": "sandbox",
"mode": "live",
"status": "active",
"verified_at": "2026-10-11T09:30:00.000Z",
"last_error": {
"code": "validation_failed",
"message": "string",
"provider_code": "string",
"provider_message": "string",
"retryable": false
},
"created": "2026-10-11T09:30:00.000Z"
}
}Response headers
x-request-idstringThe request's correlation id; quote it when reporting a problem. One of: req_ plus a uuid (Tallio made it), client: plus the x-request-id you sent (8-128 of A-Z a-z 0-9 . _ : -), or the hosting platform's id.
With every response
Show patternHide pattern
^(?:req_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|client:[A-Za-z0-9._:-]{8,128}|[A-Za-z0-9._-]{1,16}::[A-Za-z0-9._:-]{6,110})$ratelimit-limitintegerRequests allowed in the current window for the bucket this request counted against.
With 200, 404, 429 · At least 1
ratelimit-remainingintegerRequests left in the current window; 0 means the next one is refused until the window resets.
With 200, 404, 429 · At least 0
ratelimit-resetintegerSeconds until the current window resets.
With 200, 404, 429 · At least 0
www-authenticatestringThe bearer challenge: send a vendor secret key as
Authorization: Bearer <key>.With 401 · Always
Bearer realm="tallio"retry-afterintegerSeconds to wait before retrying a request refused with 429
rate_limited.With 429 · At least 1
| Code | Status | Retryable | Meaning |
|---|---|---|---|
unauthorized | 401 | No | Authentication is required. |
not_found | 404 | No | The requested resource was not found. |
rate_limited | 429 | Yes | A rate limit was reached. Retry later. |
internal_error | 500 | No | An unexpected server error occurred. |
List a merchant's connections #
/api/v1/merchants/{id}/connectionsReturns the merchant's connections in your key's mode, newest first, without their credentials.
- Bearer API key
Path parameters
idstringrequiredThe merchant's id (mer_…).
Query parameters
limitintegerHow many items to return, 1 to 100; 10 by default.
From 1 to 100 · Default:
10starting_afterstringAn id (con_…) from this list: return the items after it, older ones (pass the last id of the current page). Not with ending_before.
Up to 64 characters
ending_beforestringAn id (con_…) from this list: return the items before it, newer ones (pass the first id of the current page). Not with starting_after.
Up to 64 characters
Request
curlcurl -X GET 'https://tallio.dev/api/v1/merchants/mer_02y9O8rh7F50tGi0QcWRrx/connections' \
-H "Authorization: Bearer $TALLIO_API_KEY"| Status | Description |
|---|---|
200 | A page of connections. |
| 4XX, 5XX | An error: see Errors below. |
Response body · 200
objectstringrequiredAlways "list".
Always
listdataobject[]requiredThis page's items, newest first.
Each item: A merchant's credentials for one provider in one mode. The credentials themselves are never returned.
Show nested fields (9)Hide nested fields (9)
idstringrequiredId of the connection (con_…).
Show patternHide pattern
^con_[0-9A-Za-z]{22}$objectstringrequiredAlways "connection".
Always
connectionmerchantstringrequiredThe merchant this connection belongs to (mer_…).
Show patternHide pattern
^mer_[0-9A-Za-z]{22}$providerstringrequiredThe licensed e-invoicing provider (or direct myDATA, or Tallio's sandbox) that issues the document.
One of:
sandbox,mydata,wrapp,impact,epsilon,softone,prosvasismodestringrequiredlive for a connection made with a live key, test for a test key.
One of:
live,teststatusstringrequiredactive (documents can be routed to it), invalid (the provider refused its credentials; fix and verify again), disconnected (no longer used; its credentials are deleted 30 days later).
One of:
active,invalid,disconnectedverified_atstring | nullrequiredWhen the provider last accepted its credentials; null until then.
Format:
date-timelast_errorobject | nullrequiredWhy the provider last refused it; null otherwise.
Show nested fields (6)Hide nested fields (6)
codestringrequiredStable machine-readable error code. Branch on this, never on
message.One of:
validation_failed,unauthorized,not_found,idempotency_conflict,idempotency_in_progress,already_exists,payload_too_large,unsupported_media_type,rate_limited,not_supported,provider_rejected,provider_unavailable,service_unavailable,internal_errormessagestringrequiredHuman-readable explanation, safe to show to a developer.
provider_codestring | nullrequiredThe provider's own error code, or null when the error did not come from a provider.
provider_messagestring | nullrequiredThe provider's own error message, verbatim, or null when the error did not come from a provider.
retryablebooleanrequiredTrue when the same request may succeed if sent again later.
provider_rawanyThe provider's error response body as received, or a TruncatedProviderRaw marker when it exceeds 4096 bytes of JSON. Never holds request headers, credentials or the request payload.
createdstringrequiredWhen the connection was created.
Format:
date-time
has_morebooleanrequiredWhether more items exist past this page in the direction you paged (starting_after or ending_before).
Example response · 200{
"object": "list",
"data": [],
"has_more": false
}Response headers
x-request-idstringThe request's correlation id; quote it when reporting a problem. One of: req_ plus a uuid (Tallio made it), client: plus the x-request-id you sent (8-128 of A-Z a-z 0-9 . _ : -), or the hosting platform's id.
With every response
Show patternHide pattern
^(?:req_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|client:[A-Za-z0-9._:-]{8,128}|[A-Za-z0-9._-]{1,16}::[A-Za-z0-9._:-]{6,110})$ratelimit-limitintegerRequests allowed in the current window for the bucket this request counted against.
With 200, 400, 404, 429 · At least 1
ratelimit-remainingintegerRequests left in the current window; 0 means the next one is refused until the window resets.
With 200, 400, 404, 429 · At least 0
ratelimit-resetintegerSeconds until the current window resets.
With 200, 400, 404, 429 · At least 0
www-authenticatestringThe bearer challenge: send a vendor secret key as
Authorization: Bearer <key>.With 401 · Always
Bearer realm="tallio"retry-afterintegerSeconds to wait before retrying a request refused with 429
rate_limited.With 429 · At least 1
| Code | Status | Retryable | Meaning |
|---|---|---|---|
validation_failed | 400 | No | Request validation failed. |
unauthorized | 401 | No | Authentication is required. |
not_found | 404 | No | The requested resource was not found. |
rate_limited | 429 | Yes | A rate limit was reached. Retry later. |
internal_error | 500 | No | An unexpected server error occurred. |
Connect a merchant to a provider #
/api/v1/merchants/{id}/connectionsConnect a merchant to a provider with the merchant's own credentials, in the mode of your key (a test key connects to the provider's test environment). The credentials are encrypted at rest and never returned.
- Bearer API key
- Idempotency-Key required
Path parameters
idstringrequiredThe merchant's id (mer_…).
Header parameters
idempotency-keystringrequiredA key you choose (1-255 printable ASCII characters, e.g. a UUID) that makes a create request safe to retry: the same key with the same body returns the first result instead of creating a second document.
1 to 255 characters
Show patternHide pattern
^[\x21-\x7E]+$
Request body
(the body)oneOfrequiredConnect a merchant to a provider with the merchant's own credentials, in the mode of your key (a test key connects to the provider's test environment). The credentials are encrypted at rest and never returned.
providerstringrequiredThe provider: wrapp.
Option 1 of 2 · Always
wrappcredentialsobjectrequiredWrapp credentials: api_key plus email or wrapp_user_id.
Option 1 of 2
Show nested fields (3)Hide nested fields (3)
api_keystringrequiredThe merchant's Wrapp API key (in Wrapp: Στοιχεία API).
Option 1 of 2 · 1 to 200 characters
Show patternHide pattern
^(\S(.*\S)?)?$emailstringThe email the merchant logs in to Wrapp with, instead of wrapp_user_id. It breaks if the merchant changes the login email; prefer wrapp_user_id.
Option 1 of 2 · Format:
email· Up to 254 characterswrapp_user_idstringThe merchant's Wrapp user id (preferred: it never changes, and Wrapp's onboarding hands it over), instead of the email.
Option 1 of 2 · 1 to 100 characters
Show patternHide pattern
^(\S(.*\S)?)?$
providerstringrequiredThe provider: mydata.
Option 2 of 2 · Always
mydatacredentialsobjectrequiredDirect myDATA credentials: the merchant's own AADE REST user and subscription key.
Option 2 of 2
Show nested fields (2)Hide nested fields (2)
user_idstringrequiredThe myDATA REST API user name the merchant registered with AADE (aade-user-id).
Option 2 of 2 · 1 to 100 characters
Show patternHide pattern
^(\S(.*\S)?)?$subscription_keystringrequiredThe myDATA subscription key AADE issued for that user (ocp-apim-subscription-key).
Option 2 of 2 · 1 to 200 characters
Show patternHide pattern
^(\S(.*\S)?)?$
Request
JSON{
"provider": "wrapp",
"credentials": {
"api_key": "wrapp_api_key_from_the_merchant"
}
}| Status | Description |
|---|---|
201 | The connection, without its credentials. A replay returns the first answer. |
| 4XX, 5XX | An error: see Errors below. |
Response body · 201
dataobjectrequiredA merchant's credentials for one provider in one mode. The credentials themselves are never returned.
Show nested fields (9)Hide nested fields (9)
idstringrequiredId of the connection (con_…).
Show patternHide pattern
^con_[0-9A-Za-z]{22}$objectstringrequiredAlways "connection".
Always
connectionmerchantstringrequiredThe merchant this connection belongs to (mer_…).
Show patternHide pattern
^mer_[0-9A-Za-z]{22}$providerstringrequiredThe licensed e-invoicing provider (or direct myDATA, or Tallio's sandbox) that issues the document.
One of:
sandbox,mydata,wrapp,impact,epsilon,softone,prosvasismodestringrequiredlive for a connection made with a live key, test for a test key.
One of:
live,teststatusstringrequiredactive (documents can be routed to it), invalid (the provider refused its credentials; fix and verify again), disconnected (no longer used; its credentials are deleted 30 days later).
One of:
active,invalid,disconnectedverified_atstring | nullrequiredWhen the provider last accepted its credentials; null until then.
Format:
date-timelast_errorobject | nullrequiredWhy the provider last refused it; null otherwise.
Show nested fields (6)Hide nested fields (6)
codestringrequiredStable machine-readable error code. Branch on this, never on
message.One of:
validation_failed,unauthorized,not_found,idempotency_conflict,idempotency_in_progress,already_exists,payload_too_large,unsupported_media_type,rate_limited,not_supported,provider_rejected,provider_unavailable,service_unavailable,internal_errormessagestringrequiredHuman-readable explanation, safe to show to a developer.
provider_codestring | nullrequiredThe provider's own error code, or null when the error did not come from a provider.
provider_messagestring | nullrequiredThe provider's own error message, verbatim, or null when the error did not come from a provider.
retryablebooleanrequiredTrue when the same request may succeed if sent again later.
provider_rawanyThe provider's error response body as received, or a TruncatedProviderRaw marker when it exceeds 4096 bytes of JSON. Never holds request headers, credentials or the request payload.
createdstringrequiredWhen the connection was created.
Format:
date-time
Example response · 201{
"data": {
"id": "con_02y9O8rh7F50tGi0QcWRrx",
"object": "connection",
"merchant": "mer_02y9O8rh7F50tGi0QcWRrx",
"provider": "sandbox",
"mode": "live",
"status": "active",
"verified_at": "2026-10-11T09:30:00.000Z",
"last_error": {
"code": "validation_failed",
"message": "string",
"provider_code": "string",
"provider_message": "string",
"retryable": false
},
"created": "2026-10-11T09:30:00.000Z"
}
}Response headers
x-request-idstringThe request's correlation id; quote it when reporting a problem. One of: req_ plus a uuid (Tallio made it), client: plus the x-request-id you sent (8-128 of A-Z a-z 0-9 . _ : -), or the hosting platform's id.
With every response
Show patternHide pattern
^(?:req_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|client:[A-Za-z0-9._:-]{8,128}|[A-Za-z0-9._-]{1,16}::[A-Za-z0-9._:-]{6,110})$ratelimit-limitintegerRequests allowed in the current window for the bucket this request counted against.
With 201, 400, 404, 409, 413, 415, 429, 503 · At least 1
ratelimit-remainingintegerRequests left in the current window; 0 means the next one is refused until the window resets.
With 201, 400, 404, 409, 413, 415, 429, 503 · At least 0
ratelimit-resetintegerSeconds until the current window resets.
With 201, 400, 404, 409, 413, 415, 429, 503 · At least 0
idempotent-replayedstringtrue when this answer replays an earlier request with the same Idempotency-Key (nothing new was created); absent on the request that created it.
With 201 · Always
truewww-authenticatestringThe bearer challenge: send a vendor secret key as
Authorization: Bearer <key>.With 401 · Always
Bearer realm="tallio"retry-afterintegerSeconds to wait before retrying a request refused with 429
rate_limited.With 429 · At least 1
| Code | Status | Retryable | Meaning |
|---|---|---|---|
validation_failed | 400 | No | Request validation failed. |
unauthorized | 401 | No | Authentication is required. |
not_found | 404 | No | The requested resource was not found. |
idempotency_conflict | 409 | No | This idempotency key was already used with a different request. |
idempotency_in_progress | 409 | Yes | A request with this idempotency key is still in progress; retry it after Retry-After to get its answer. |
already_exists | 409 | No | An object with this identifier already exists; look it up instead of creating it again. |
payload_too_large | 413 | No | The request body is too large. |
unsupported_media_type | 415 | No | The request body must be JSON (Content-Type: application/json). |
rate_limited | 429 | Yes | A rate limit was reached. Retry later. |
internal_error | 500 | No | An unexpected server error occurred. |
service_unavailable | 503 | Yes | A service Tallio depends on is temporarily unavailable. |