Partner Tenants
Create and manage child tenants (Partner API only).
A tenant represents a customer account in Bizzlink — the organizational unit that owns users, settings, and subscriptions. Each tenant can have one or more legal entities, which are the actual companies that appear on invoices and are registered in the Peppol network.
For example, a holding company (one tenant) may operate three subsidiaries (three legal entities), each with their own VAT number and Peppol IDs.
Billing models
When creating a child tenant, you must specify a billingModel:
- SEATS — the tenant pays a fixed monthly fee per legal entity. Each legal entity added to the tenant counts as one seat.
- FLOW — the tenant pays per document sent or received, regardless of the number of legal entities.
Your partner account must have an active subscription matching the requested billing model.
List child tenants
GET
/bizzlink/tenantsLists all tenants owned by the calling partner.
Responses
| Status | Description |
|---|---|
200 | Tenant list |
403 | Caller is not a partner |
Response Body — JsonApiListDocumentTenantResponseAttributes
| Field | Type | Description |
|---|---|---|
JsonApiResourceTenantResponseAttributes[] | ||
TenantResponseAttributes | Resource-specific fields. | |
active | boolean | Whether the tenant is active. |
addressCity | string | City. |
addressCountry | string | Country code (ISO 3166-1 alpha-2). |
addressPostalCode | string | Postal code. |
addressStreet | string | Street address. |
billingModel | string | Billing model assigned to this tenant. |
companyName | string | Company name. |
contactEmail | string | Contact email. |
contactName | string | Contact person name. |
contactPhone | string | Contact phone. |
createdAt | datetime | Timestamp when the tenant was created. |
tenantCode | string | Unique tenant code. |
updatedAt | datetime | Timestamp of last update. |
id | string | Unique resource identifier (UUID). Use this value to poll the status endpoint or to reference the resource in subsequent requests. |
type | string | Resource type — matches the endpoint (e.g. 'invoices' for POST /documents/invoices, 'documents' for GET /documents/{id}/status). |
JsonApiLinks | ||
first | string | URL of the first page. |
last | string | URL of the last page. |
next | string | URL of the next page, null on last page. |
prev | string | URL of the previous page, null on first page. |
self | string | URL of the current page. |
JsonApiPaginationMeta | ||
page | integer | 1-based index of the current page. |
size | integer | Number of items per page. |
totalElements | integer | Total number of items across all pages. |
totalPages | integer | Total number of pages. |
cURL Request
curl -X GET https://gateway.vigasoft.lu/bizzlink/tenants \
-H "Authorization: Bearer $API_TOKEN" \
-H "X-Bizzlink-Signature: t=$TIMESTAMP,v1=$SIGNATURE"Response
200 OK{
"data": [
{
"attributes": {
"active": true,
"addressCity": "string",
"addressCountry": "LU",
"addressPostalCode": "string",
"addressStreet": "string",
"billingModel": "SEATS",
"companyName": "Kunde GmbH",
"contactEmail": "max@kunde.lu",
"contactName": "Max Müller",
"contactPhone": "+352 123 456",
"createdAt": "2026-01-01T00:00:00Z",
"tenantCode": "KUNDE-GMBH",
"updatedAt": "2026-01-01T00:00:00Z"
},
"id": "770e8400-e29b-41d4-a716-446655440000",
"type": "tenants"
}
],
"links": {
"first": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=1&page%5Bsize%5D=20",
"last": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=7&page%5Bsize%5D=20",
"next": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=4&page%5Bsize%5D=20",
"prev": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=2&page%5Bsize%5D=20",
"self": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=3&page%5Bsize%5D=20"
},
"meta": {
"page": 1,
"size": 20,
"totalElements": 137,
"totalPages": 7
}
}Create a child tenant
POST
/bizzlink/tenantsCreates a new tenant as a child of the calling partner tenant. Automatically creates a default legal entity and Peppol IDs based on VAT number.
Request Body
| Field | Type | Description |
|---|---|---|
| required | object | Resource envelope. 'attributes' holds the domain fields; 'meta.scope' declares whether the resource belongs to the whole tenant or to a specific legal entity (Peppol ID). |
| required | TenantCreateAttributes | The actual resource fields. |
addressCityrequired | string | City. |
addressCountryrequired | string | ISO 3166-1 alpha-2 country code. |
addressPostalCoderequired | string | Postal code. |
addressStreetrequired | string | Street address. |
billingModelrequired | string | Billing model for this tenant. Must match an active partner subscription. |
companyNamerequired | string | Company name. |
contactEmailrequired | string | Contact email. |
contactName | string | Contact person name. |
contactPhone | string | Contact phone. |
defaultLanguage | string | Default language (ISO 639-1, lowercase). Defaults to 'fr' if not set. |
tradeRegisterNumberrequired | string | Trade register number. |
vatNumberrequired | string | VAT number. |
JsonApiMeta | Optional JSON:API meta. Only used by scoped resources (e.g. email templates, notification emails) to declare their ownership scope. | |
| required | JsonApiScope | |
typerequired | string | Scope type. 'tenant' = applies to the whole tenant. 'legal-entity' = applies only to the Peppol ID given in 'value'. 'partner' = applies to all child tenants of the calling partner tenant; 'value' must be empty. |
value | string | Required when type='legal-entity': the Peppol ID (scheme:identifier) that owns this resource, e.g. '9938:lu28079289'. Must belong to the requesting tenant. Ignored when type='tenant'. Must be empty when type='partner'. |
type | string | Must be 'tenants' for this endpoint. |
Responses
| Status | Description |
|---|---|
201 | Tenant created |
403 | Caller is not a partner |
422 | Validation error |
cURL Request
curl -X POST https://gateway.vigasoft.lu/bizzlink/tenants \
-H "Authorization: Bearer $API_TOKEN" \
-H "X-Bizzlink-Signature: t=$TIMESTAMP,v1=$SIGNATURE" \
-H "Content-Type: application/json" \
-d '{
"data": {}
}'Get child tenant details
GET
/bizzlink/tenants/{id}Returns details of a specific child tenant.
Responses
| Status | Description |
|---|---|
200 | Tenant details |
403 | Caller is not a partner or tenant is not a child |
404 | Tenant not found |
Response Body — JsonApiDocumentTenantResponseAttributes
| Field | Type | Description |
|---|---|---|
JsonApiResourceTenantResponseAttributes | ||
TenantResponseAttributes | Resource-specific fields. | |
active | boolean | Whether the tenant is active. |
addressCity | string | City. |
addressCountry | string | Country code (ISO 3166-1 alpha-2). |
addressPostalCode | string | Postal code. |
addressStreet | string | Street address. |
billingModel | string | Billing model assigned to this tenant. |
companyName | string | Company name. |
contactEmail | string | Contact email. |
contactName | string | Contact person name. |
contactPhone | string | Contact phone. |
createdAt | datetime | Timestamp when the tenant was created. |
tenantCode | string | Unique tenant code. |
updatedAt | datetime | Timestamp of last update. |
id | string | Unique resource identifier (UUID). Use this value to poll the status endpoint or to reference the resource in subsequent requests. |
type | string | Resource type — matches the endpoint (e.g. 'invoices' for POST /documents/invoices, 'documents' for GET /documents/{id}/status). |
cURL Request
curl -X GET https://gateway.vigasoft.lu/bizzlink/tenants/{id} \
-H "Authorization: Bearer $API_TOKEN" \
-H "X-Bizzlink-Signature: t=$TIMESTAMP,v1=$SIGNATURE"Response
200 OK{
"data": {
"attributes": {
"active": true,
"addressCity": "string",
"addressCountry": "LU",
"addressPostalCode": "string",
"addressStreet": "string",
"billingModel": "SEATS",
"companyName": "Kunde GmbH",
"contactEmail": "max@kunde.lu",
"contactName": "Max Müller",
"contactPhone": "+352 123 456",
"createdAt": "2026-01-01T00:00:00Z",
"tenantCode": "KUNDE-GMBH",
"updatedAt": "2026-01-01T00:00:00Z"
},
"id": "770e8400-e29b-41d4-a716-446655440000",
"type": "tenants"
}
}Update child tenant
PATCH
/bizzlink/tenants/{id}Updates an existing child tenant.
Request Body
| Field | Type | Description |
|---|---|---|
| required | object | |
| required | TenantCreateAttributes | |
addressCityrequired | string | City. |
addressCountryrequired | string | ISO 3166-1 alpha-2 country code. |
addressPostalCoderequired | string | Postal code. |
addressStreetrequired | string | Street address. |
billingModelrequired | string | Billing model for this tenant. Must match an active partner subscription. |
companyNamerequired | string | Company name. |
contactEmailrequired | string | Contact email. |
contactName | string | Contact person name. |
contactPhone | string | Contact phone. |
defaultLanguage | string | Default language (ISO 639-1, lowercase). Defaults to 'fr' if not set. |
tradeRegisterNumberrequired | string | Trade register number. |
vatNumberrequired | string | VAT number. |
id | string | |
JsonApiMeta | ||
| required | JsonApiScope | |
typerequired | string | Scope type. 'tenant' = applies to the whole tenant. 'legal-entity' = applies only to the Peppol ID given in 'value'. 'partner' = applies to all child tenants of the calling partner tenant; 'value' must be empty. |
value | string | Required when type='legal-entity': the Peppol ID (scheme:identifier) that owns this resource, e.g. '9938:lu28079289'. Must belong to the requesting tenant. Ignored when type='tenant'. Must be empty when type='partner'. |
type | string | Must be 'tenants' for this endpoint. |
Responses
| Status | Description |
|---|---|
200 | Tenant updated |
403 | Caller is not a partner or tenant is not a child |
404 | Tenant not found |
Response Body — JsonApiDocumentTenantResponseAttributes
| Field | Type | Description |
|---|---|---|
JsonApiResourceTenantResponseAttributes | ||
TenantResponseAttributes | Resource-specific fields. | |
active | boolean | Whether the tenant is active. |
addressCity | string | City. |
addressCountry | string | Country code (ISO 3166-1 alpha-2). |
addressPostalCode | string | Postal code. |
addressStreet | string | Street address. |
billingModel | string | Billing model assigned to this tenant. |
companyName | string | Company name. |
contactEmail | string | Contact email. |
contactName | string | Contact person name. |
contactPhone | string | Contact phone. |
createdAt | datetime | Timestamp when the tenant was created. |
tenantCode | string | Unique tenant code. |
updatedAt | datetime | Timestamp of last update. |
id | string | Unique resource identifier (UUID). Use this value to poll the status endpoint or to reference the resource in subsequent requests. |
type | string | Resource type — matches the endpoint (e.g. 'invoices' for POST /documents/invoices, 'documents' for GET /documents/{id}/status). |
cURL Request
curl -X PATCH https://gateway.vigasoft.lu/bizzlink/tenants/{id} \
-H "Authorization: Bearer $API_TOKEN" \
-H "X-Bizzlink-Signature: t=$TIMESTAMP,v1=$SIGNATURE" \
-H "Content-Type: application/json" \
-d '{
"data": {}
}'Response
200 OK{
"data": {
"attributes": {
"active": true,
"addressCity": "string",
"addressCountry": "LU",
"addressPostalCode": "string",
"addressStreet": "string",
"billingModel": "SEATS",
"companyName": "Kunde GmbH",
"contactEmail": "max@kunde.lu",
"contactName": "Max Müller",
"contactPhone": "+352 123 456",
"createdAt": "2026-01-01T00:00:00Z",
"tenantCode": "KUNDE-GMBH",
"updatedAt": "2026-01-01T00:00:00Z"
},
"id": "770e8400-e29b-41d4-a716-446655440000",
"type": "tenants"
}
}