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/tenants
Lists all tenants owned by the calling partner.

Responses:

StatusDescription
200Tenant list
403Caller is not a partner

Response BodyJsonApiListDocumentTenantResponseAttributes:

FieldTypeDescription
dataJsonApiResourceTenantResponseAttributes[]
    attributesTenantResponseAttributesResource-specific fields.
        activebooleanWhether the tenant is active.
        addressCitystringCity.
        addressCountrystringCountry code (ISO 3166-1 alpha-2).
        addressPostalCodestringPostal code.
        addressStreetstringStreet address.
        billingModelstringBilling model assigned to this tenant.
        companyNamestringCompany name.
        contactEmailstringContact email.
        contactNamestringContact person name.
        contactPhonestringContact phone.
        createdAtdatetimeTimestamp when the tenant was created.
        tenantCodestringUnique tenant code.
        updatedAtdatetimeTimestamp of last update.
    idstringUnique resource identifier (UUID). Use this value to poll the status endpoint or to reference the resource in subsequent requests.
    typestringResource type — matches the endpoint (e.g. 'invoices' for POST /documents/invoices, 'documents' for GET /documents/{id}/status).
linksJsonApiLinks
    firststringURL of the first page.
    laststringURL of the last page.
    nextstringURL of the next page, null on last page.
    prevstringURL of the previous page, null on first page.
    selfstringURL of the current page.
metaJsonApiPaginationMeta
    pageinteger1-based index of the current page.
    sizeintegerNumber of items per page.
    totalElementsintegerTotal number of items across all pages.
    totalPagesintegerTotal 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": "invoices"
    }
    ],
    "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/tenants
Creates 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:

FieldTypeRequiredDescription
dataobjectYesResource 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).
    attributesTenantCreateAttributesYesThe actual resource fields.
        addressCitystringYesCity.
        addressCountrystringYesISO 3166-1 alpha-2 country code.
        addressPostalCodestringYesPostal code.
        addressStreetstringYesStreet address.
        billingModelstringYesBilling model for this tenant. Must match an active partner subscription.
        companyNamestringYesCompany name.
        contactEmailstringYesContact email.
        contactNamestringNoContact person name.
        contactPhonestringNoContact phone.
        defaultLanguagestringNoDefault language (ISO 639-1, lowercase). Defaults to 'fr' if not set.
        tradeRegisterNumberstringYesTrade register number.
        vatNumberstringYesVAT number.
    metaJsonApiMetaNoOptional JSON:API meta. Only used by scoped resources (e.g. email templates, notification emails) to declare their ownership scope.
        scopeJsonApiScopeYes
            typestringYesScope 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.
            valuestringNoRequired 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'.
    typestringNoMust be 'tenants' for this endpoint.

Responses:

StatusDescription
201Tenant created
403Caller is not a partner
422Validation 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:

StatusDescription
200Tenant details
403Caller is not a partner or tenant is not a child
404Tenant not found

Response BodyJsonApiDocumentTenantResponseAttributes:

FieldTypeDescription
dataJsonApiResourceTenantResponseAttributes
    attributesTenantResponseAttributesResource-specific fields.
        activebooleanWhether the tenant is active.
        addressCitystringCity.
        addressCountrystringCountry code (ISO 3166-1 alpha-2).
        addressPostalCodestringPostal code.
        addressStreetstringStreet address.
        billingModelstringBilling model assigned to this tenant.
        companyNamestringCompany name.
        contactEmailstringContact email.
        contactNamestringContact person name.
        contactPhonestringContact phone.
        createdAtdatetimeTimestamp when the tenant was created.
        tenantCodestringUnique tenant code.
        updatedAtdatetimeTimestamp of last update.
    idstringUnique resource identifier (UUID). Use this value to poll the status endpoint or to reference the resource in subsequent requests.
    typestringResource 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": "invoices"
  }
}

Update child tenant

PATCH /bizzlink/tenants/{id}
Updates an existing child tenant.

Request Body:

FieldTypeRequiredDescription
dataobjectYes
    attributesTenantCreateAttributesYes
        addressCitystringYesCity.
        addressCountrystringYesISO 3166-1 alpha-2 country code.
        addressPostalCodestringYesPostal code.
        addressStreetstringYesStreet address.
        billingModelstringYesBilling model for this tenant. Must match an active partner subscription.
        companyNamestringYesCompany name.
        contactEmailstringYesContact email.
        contactNamestringNoContact person name.
        contactPhonestringNoContact phone.
        defaultLanguagestringNoDefault language (ISO 639-1, lowercase). Defaults to 'fr' if not set.
        tradeRegisterNumberstringYesTrade register number.
        vatNumberstringYesVAT number.
    idstringNo
    metaJsonApiMetaNo
        scopeJsonApiScopeYes
            typestringYesScope 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.
            valuestringNoRequired 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'.
    typestringNoMust be 'tenants' for this endpoint.

Responses:

StatusDescription
200Tenant updated
403Caller is not a partner or tenant is not a child
404Tenant not found

Response BodyJsonApiDocumentTenantResponseAttributes:

FieldTypeDescription
dataJsonApiResourceTenantResponseAttributes
    attributesTenantResponseAttributesResource-specific fields.
        activebooleanWhether the tenant is active.
        addressCitystringCity.
        addressCountrystringCountry code (ISO 3166-1 alpha-2).
        addressPostalCodestringPostal code.
        addressStreetstringStreet address.
        billingModelstringBilling model assigned to this tenant.
        companyNamestringCompany name.
        contactEmailstringContact email.
        contactNamestringContact person name.
        contactPhonestringContact phone.
        createdAtdatetimeTimestamp when the tenant was created.
        tenantCodestringUnique tenant code.
        updatedAtdatetimeTimestamp of last update.
    idstringUnique resource identifier (UUID). Use this value to poll the status endpoint or to reference the resource in subsequent requests.
    typestringResource 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": "invoices"
  }
}