# Creates an administration Source: https://docs.paytsoftware.com/api-reference/administrations/creates-an-administration /openapi3.json post /v1/administrations Creates an administration # Get administration by id Source: https://docs.paytsoftware.com/api-reference/administrations/get-administration-by-id /openapi3.json get /v1/administrations/{administration_id} Get administration by id # Get administrations Source: https://docs.paytsoftware.com/api-reference/administrations/get-administrations /openapi3.json get /v1/administrations Get administrations # Upload a logo for an administration. Source: https://docs.paytsoftware.com/api-reference/administrations/upload-a-logo-for-an-administration /openapi3.json post /v1/administrations/{administration_id}/logo Upload a logo for an administration. # Get companies connected to your application Source: https://docs.paytsoftware.com/api-reference/companies/get-companies-connected-to-your-application /openapi3.json get /v1/companies **NOTE:** This endpoint uses [Basic authentication](https://docs.paytsoftware.com/authentication/basic-authorization). Returns a list of all companies with an active connection to your application. # Get company by id Source: https://docs.paytsoftware.com/api-reference/companies/get-company-by-id /openapi3.json get /v1/companies/{id} **NOTE:** This endpoint uses [Basic authentication](https://docs.paytsoftware.com/authentication/basic-authorization). Get company by id. # Create or update administration contacts Source: https://docs.paytsoftware.com/api-reference/contacts/create-or-update-administration-contacts /openapi3.json post /v1/contacts Create or update administration contacts # Get administration contacts Source: https://docs.paytsoftware.com/api-reference/contacts/get-administration-contacts /openapi3.json get /v1/contacts Get administration contacts # Get administration credit case by id Source: https://docs.paytsoftware.com/api-reference/credit_cases/get-administration-credit-case-by-id /openapi3.json get /v1/credit_cases/{id} Get administration credit case by id # Get administration credit_cases Source: https://docs.paytsoftware.com/api-reference/credit_cases/get-administration-credit_cases /openapi3.json get /v1/credit_cases Get administration credit_cases # Get credit cases deleted in the last 90 days Source: https://docs.paytsoftware.com/api-reference/credit_cases/get-credit-cases-deleted-in-the-last-90-days /openapi3.json get /v1/credit_cases/deleted Get credit cases deleted in the last 90 days # Create or update administration debtors Source: https://docs.paytsoftware.com/api-reference/debtors/create-or-update-administration-debtors /openapi3.json post /v1/debtors Create or update administration debtors # Get administration debtor by id Source: https://docs.paytsoftware.com/api-reference/debtors/get-administration-debtor-by-id /openapi3.json get /v1/debtors/{id} Get administration debtor by id # Get administration debtors Source: https://docs.paytsoftware.com/api-reference/debtors/get-administration-debtors /openapi3.json get /v1/debtors Get administration debtors # Create files to upload Source: https://docs.paytsoftware.com/api-reference/files/create-files-to-upload /openapi3.json post /v1/files Create files to upload # Block invoices Source: https://docs.paytsoftware.com/api-reference/invoices/block-invoices /openapi3.json patch /v1/invoices/block Block invoices # Get administration invoice by id Source: https://docs.paytsoftware.com/api-reference/invoices/get-administration-invoice-by-id /openapi3.json get /v1/invoices/{id} Get administration invoice by id # Get administration invoices Source: https://docs.paytsoftware.com/api-reference/invoices/get-administration-invoices /openapi3.json get /v1/invoices Get administration invoices # Get invoices deleted in the last 90 days Source: https://docs.paytsoftware.com/api-reference/invoices/get-invoices-deleted-in-the-last-90-days /openapi3.json get /v1/invoices/deleted Get invoices deleted in the last 90 days # Resume invoices that are blocked through the API Source: https://docs.paytsoftware.com/api-reference/invoices/resume-invoices-that-are-blocked-through-the-api /openapi3.json patch /v1/invoices/resume Resume invoices that are blocked through the API # Update administration invoices Source: https://docs.paytsoftware.com/api-reference/invoices/update-administration-invoices /openapi3.json patch /v1/invoices Update administration invoices # Upsert invoices in bulk Source: https://docs.paytsoftware.com/api-reference/invoices/upsert-invoices-in-bulk /openapi3.json post /v1/invoices Upsert invoices in bulk # Get administration message by id Source: https://docs.paytsoftware.com/api-reference/messages/get-administration-message-by-id /openapi3.json get /v1/messages/{id} Get administration message by id # Get administration messages Source: https://docs.paytsoftware.com/api-reference/messages/get-administration-messages /openapi3.json get /v1/messages Get administration messages # Send a message to a debtor Source: https://docs.paytsoftware.com/api-reference/messages/send-a-message-to-a-debtor /openapi3.json post /v1/messages Send a message to a debtor # Update messages Source: https://docs.paytsoftware.com/api-reference/messages/update-messages /openapi3.json patch /v1/messages Update messages # Get administration notes Source: https://docs.paytsoftware.com/api-reference/notes/get-administration-notes /openapi3.json get /v1/notes Get administration notes # Get administration notification by id Source: https://docs.paytsoftware.com/api-reference/notifications/get-administration-notification-by-id /openapi3.json get /v1/notifications/{id} Get administration notification by id # Get administration notifications Source: https://docs.paytsoftware.com/api-reference/notifications/get-administration-notifications /openapi3.json get /v1/notifications Get administration notifications # Get administration order lines Source: https://docs.paytsoftware.com/api-reference/order_lines/get-administration-order-lines /openapi3.json get /v1/order_lines Get administration order lines # Create an order Source: https://docs.paytsoftware.com/api-reference/orders/create-an-order /openapi3.json post /v1/orders Create an order # Create payment conditions Source: https://docs.paytsoftware.com/api-reference/payment_conditions/create-payment-conditions /openapi3.json post /v1/payment_conditions Create payment conditions # Approve a proposed payment plan Source: https://docs.paytsoftware.com/api-reference/payment_plans/approve-a-proposed-payment-plan /openapi3.json patch /v1/payment_plans/{id}/approve Approve a proposed payment plan # Create an approved payment plan Source: https://docs.paytsoftware.com/api-reference/payment_plans/create-an-approved-payment-plan /openapi3.json post /v1/payment_plans Create an approved payment plan # Deactivate an active payment plan Source: https://docs.paytsoftware.com/api-reference/payment_plans/deactivate-an-active-payment-plan /openapi3.json patch /v1/payment_plans/{id}/deactivate Deactivate an active payment plan # Get administration payment plan by id Source: https://docs.paytsoftware.com/api-reference/payment_plans/get-administration-payment-plan-by-id /openapi3.json get /v1/payment_plans/{id} Get administration payment plan by id # Get administration payment plans Source: https://docs.paytsoftware.com/api-reference/payment_plans/get-administration-payment-plans /openapi3.json get /v1/payment_plans Get administration payment plans # Get payment_plans deleted in the last 90 days Source: https://docs.paytsoftware.com/api-reference/payment_plans/get-payment_plans-deleted-in-the-last-90-days /openapi3.json get /v1/payment_plans/deleted Get payment_plans deleted in the last 90 days # Reject a proposed payment plan Source: https://docs.paytsoftware.com/api-reference/payment_plans/reject-a-proposed-payment-plan /openapi3.json patch /v1/payment_plans/{id}/reject Reject a proposed payment plan # Get administration payments Source: https://docs.paytsoftware.com/api-reference/payments/get-administration-payments /openapi3.json get /v1/payments Get administration payments # Get payments deleted in the last 90 days Source: https://docs.paytsoftware.com/api-reference/payments/get-payments-deleted-in-the-last-90-days /openapi3.json get /v1/payments/deleted Get payments deleted in the last 90 days # Create signed psp mandates, these need to be verified before creating Source: https://docs.paytsoftware.com/api-reference/psp_mandates/create-signed-psp-mandates-these-need-to-be-verified-before-creating /openapi3.json post /v1/psp_mandates Create signed psp mandates, these need to be verified before creating # Delete PSP mandates Source: https://docs.paytsoftware.com/api-reference/psp_mandates/delete-psp-mandates /openapi3.json delete /v1/psp_mandates Deactivate PSP mandates and schedule their revocation. # Get administration PSP mandates Source: https://docs.paytsoftware.com/api-reference/psp_mandates/get-administration-psp-mandates /openapi3.json get /v1/psp_mandates Get administration PSP mandates # Get PSP mandates deleted in the last 90 days Source: https://docs.paytsoftware.com/api-reference/psp_mandates/get-psp-mandates-deleted-in-the-last-90-days /openapi3.json get /v1/psp_mandates/deleted Get PSP mandates deleted in the last 90 days # Get administration PSP transaction by id Source: https://docs.paytsoftware.com/api-reference/psp_transactions/get-administration-psp-transaction-by-id /openapi3.json get /v1/psp_transactions/{id} Get administration PSP transaction by id # Get administration PSP transactions Source: https://docs.paytsoftware.com/api-reference/psp_transactions/get-administration-psp-transactions /openapi3.json get /v1/psp_transactions Get administration PSP transactions # Sign up a new Payt account Source: https://docs.paytsoftware.com/api-reference/sign_up/sign-up-a-new-payt-account /openapi3.json post /v1/sign_up **NOTE:** This endpoint uses Basic authentication, just as the [token endpoints](https://docs.paytsoftware.com/authentication/tokens). Creates a Payt account containing a user, company and administration. An OAuth authorization_code will be returned with which the first access_token can be created. This means that in order to complete the API authorization the confirm step must be made [as described here](https://docs.paytsoftware.com/authentication/authorization). If connection parameters are given then these are added to the newly created administration and are validated during the signup. If the connection parameters are invalid a validation error will be returned. # Add a comment to a task Source: https://docs.paytsoftware.com/api-reference/tasks/add-a-comment-to-a-task /openapi3.json post /v1/tasks/{id}/comment Add a comment to a task # Get administration task by id Source: https://docs.paytsoftware.com/api-reference/tasks/get-administration-task-by-id /openapi3.json get /v1/tasks/{id} Get administration task by id # Get administration tasks Source: https://docs.paytsoftware.com/api-reference/tasks/get-administration-tasks /openapi3.json get /v1/tasks Get administration tasks # Mark a task as completed Source: https://docs.paytsoftware.com/api-reference/tasks/mark-a-task-as-completed /openapi3.json patch /v1/tasks/{id}/mark_completed Mark a task as completed # Unmark a task as completed Source: https://docs.paytsoftware.com/api-reference/tasks/unmark-a-task-as-completed /openapi3.json patch /v1/tasks/{id}/unmark_completed Unmark a task as completed # Create or update vat rates Source: https://docs.paytsoftware.com/api-reference/vat_rates/create-or-update-vat-rates /openapi3.json post /v1/vat_rates Create or update vat rates # Get administration vat rates Source: https://docs.paytsoftware.com/api-reference/vat_rates/get-administration-vat-rates /openapi3.json get /v1/vat_rates Get administration vat rates # Changelog Source: https://docs.paytsoftware.com/api/changelog API version history: endpoints, fields, and webhook events added over time. | Date | Change | | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 2026-06-23 | Add `autogenerated_credit_limit_amount`, `external_credit_limit_amount` and `external_credit_limit_currency_code` to debtor [getV1Debtors](/api-reference/debtors/get-administration-debtors) | | 2026-06-03 | Added webhook event `debtor_email_address_removed` for when a custom email address is removed for a debtor | | 2026-04-30 | Added endpoints "MarkCompleted" and "UnmarkCompleted" for [tasks](/api-reference/tasks/get-administration-tasks) | | 2026-04-29 | Made "mandate\_identifier" optional and added "mandate\_reference" in [postV1PspMandates](/api-reference/psp_mandates/create-signed-psp-mandates-these-need-to-be-verified-before-creating) to allow creating mandates at Mollie | | 2026-04-15 | Endpoint for creating comments on tasks [postV1TasksIdComment](/api-reference/tasks/add-a-comment-to-a-task) | | 2026-04-14 | Added "comments" to task endpoint [getV1TasksId](/api-reference/tasks/get-administration-task-by-id) | | 2026-02-27 | Add "peppol\_identifier" to endpoint [postV1Debtors](/api-reference/debtors/create-or-update-administration-debtors) | | 2026-02-20 | Add "payment\_methods" and "statuses" filters to endpoint [getV1PspTransactions](/api-reference/psp_transactions/get-administration-psp-transactions) | | 2026-01-16 | Add "reversal\_code" to endpoint [getV1PspTransactions](/api-reference/psp_transactions/get-administration-psp-transactions) | | 2025-12-02 | Added resume invoices endpoint [patchV1InvoicesResume](/api-reference/invoices/resume-invoices-that-are-blocked-through-the-api) | | 2025-12-01 | Added block invoices endpoint [patchV1InvoicesBlock](/api-reference/invoices/block-invoices) | | 2025-10-02 | Added "birth\_date" to [postV1Contacts](/api-reference/contacts/create-or-update-administration-contacts) | | 2025-07-15 | Added "sent\_at" to [patchV1Invoices and postV1Invoices](/api-reference/invoices/get-administration-invoices) | | 2025-07-07 | Added "debtor\_numbers" and filter for "debtor\_numbers" to [getV1Contacts](/api-reference/contacts/get-administration-contacts) | | 2025-04-09 | Added details with a "bounce\_reason" to [getV1Notifications](/api-reference/notifications/get-administration-notifications) | | 2025-04-09 | Added "active" and filters for "debtor\_number" and "debtor\_identifier" to [getV1PaymentPlans](/api-reference/payment_plans/get-administration-payment-plans) | | 2025-04-02 | Added "payment\_condition" to [patchV1Invoices and postV1Invoices](/api-reference/invoices/get-administration-invoices) | | 2025-03-27 | Added endpoint for deleted payment plans [getV1PaymentPlansDeleted](/api-reference/payment_plans/get-payment_plans-deleted-in-the-last-90-days) | | 2025-03-24 | Endpoint for contacts [getV1Contacts](/api-reference/contacts/get-administration-contacts) | | 2025-03-21 | Removed "flow\_code" from [patchV1Invoices](/api-reference/invoices/update-administration-invoices) | | 2025-01-13 | Endpoint for creating invoices [postV1Invoices](/api-reference/invoices/upsert-invoices-in-bulk) | | 2024-12-16 | Added "active\_credit\_case\_id" to, and marked "credit\_case\_id" deprecated on [getV1Invoices](/api-reference/invoices/get-administration-invoices) | | 2024-10-01 | Endpoint for posting files [postV1Files](/api-reference/files/create-files-to-upload) | | 2024-09-26 | Added "end\_of\_service\_at" and "end\_of\_service\_announcement\_at" to [getV1Invoices](/api-reference/invoices/get-administration-invoices) | | 2024-08-08 | Added "flow\_code" to update flow for invoices to [patchV1Invoices](/api-reference/invoices/update-administration-invoices) | | 2024-08-06 | Added documentation for Post/Patch [responses](/api/responses) | | 2024-08-02 | Endpoint for updating invoices, only labels and categories: [patchV1Invoices](/api-reference/invoices/update-administration-invoices) | | 2024-07-30 | Endpoint for updating messages with read or unread status: [patchV1Messages](/api-reference/messages/update-messages) | | 2024-04-26 | Added endpoint for deleted invoices: [getV1InvoicesDeleted](/api-reference/invoices/get-invoices-deleted-in-the-last-90-days) | | 2024-03-28 | Added "administration\_costs\_total" and "administration\_costs\_open" to [getV1Invoices](/api-reference/invoices/get-administration-invoices) | | 2024-03-26 | Added "last\_successful\_import\_at" to [getV1Administrations](/api-reference/administrations/get-administration-by-id) | | 2024-03-01 | Added create debtors endpoint: [postV1Debtors](/api-reference/debtors/create-or-update-administration-debtors) | # Overview Source: https://docs.paytsoftware.com/api/overview Fetch invoices and debtors from api.paytsoftware.com in a paginated fashion. This API lets you fetch all invoices or debtors in an administration in a paginated fashion from `api.paytsoftware.com`. It requires the API module to be enabled for the administration. Setting up authorization is [explained here](/authentication/authorization), and the full endpoint reference is in the [API Reference](/api-reference/administrations/get-administrations). ## Base URL All API requests go to: ``` https://api.paytsoftware.com ``` Use `https://demo-api.paytsoftware.com` for testing against the demo environment. See [Testing](/api/testing) for how to set up a free demo account. ## Requirements * TLS 1.2 or higher (SSL required on all requests) * OAuth2 Bearer token or static API token in the `Authorization` header * All monetary values are strings with two decimals * All timestamps are UTC, formatted as ISO 8601 ## Keep in mind * Use index endpoints when you need data for multiple records: do not fire multiple requests at show endpoints. Use the cursor from the last response to request the next page (see [Pagination & syncing](/api/pagination-and-syncing)). * POST and PATCH endpoints return a response with a success count and errors. See the [responses page](/api/responses). * Some fields are only returned when explicitly requested through the `fields` parameter. Check the response model in the [API Reference](/api-reference/administrations/get-administrations) to see which fields require an explicit request. Authorize your app and obtain access tokens. Page through results and sync only what changed. # Pagination & syncing Source: https://docs.paytsoftware.com/api/pagination-and-syncing Page through large result sets and sync only records that changed since the last run. ## Pagination To fetch the next page, set the `cursor` parameter to the `pagination.cursor` value returned in the last response. **Example request:** ```http Request theme={null} GET https://api.paytsoftware.com/v1/invoices?administration_id=81&cursor=2897875 Authorization: Bearer IBzLDErQvt9gOmSLarUtDy06emduHZmKEG2OSPdHpJ8 ``` ```bash cURL theme={null} curl 'https://api.paytsoftware.com/v1/invoices?administration_id=81&cursor=2897875' \ --header 'Authorization: Bearer IBzLDErQvt9gOmSLarUtDy06emduHZmKEG2OSPdHpJ8' ``` **Response:** ```json theme={null} { "data": [ { "category": null, "currency_code": "EUR", "description": null, "debtor_id": 543239, "id": 2603746, "invoice_number": "JbV9Jgka1oA", "purchase_order_number": null, "order_number": "7431989686", "payment_date": null, "due_date": "2019-05-15", "invoice_date": "2019-05-01", "total_amount": "5182.00", "open_amount": "5182.00", "book_open_amount": "5182.00", "book_total_amount": "5182.00", "collectable_at": null, "debt_collection_at": null, "final_reminder_at": null, "latest_reminder_at": null, "sent_at": "2019-04-30T22:00:00Z" } ], "pagination": { "cursor": 2603755 } } ``` ## Syncing data The `updated_after` parameter requests only records that have changed since a given timestamp (for instance, the last time data was synced). When the last page of data is processed, store the `updated_at` timestamp of the most recently updated record in the last response and use it to fetch all updated records in a future run. When a response contains no records, reuse the previous `updated_at` timestamp for the next sync session: do not advance it, or you may skip records. # Power BI templates Source: https://docs.paytsoftware.com/api/powerbi-templates Pre-built Power BI templates that connect directly to the Payt API to visualize your accounts receivable data. Payt offers pre-built Power BI templates that connect directly to the Payt API. These templates let you visualize your accounts receivable data without any custom development. Each template requires an API token with permissions for the listed resources. See [Basic authorization](/authentication/basic-authorization) for instructions on how to authenticate. | Name | Required permissions | Link | | ----------------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | | Workload template | Administrations, Messages, Notes, Notifications, Tasks | [Workload template](https://backend.paytsoftware.com/powerbi_templates/workload.pbit) | | Age Analysis template | Administrations, Debtors, Invoices, Payments | [Age Analysis template](https://backend.paytsoftware.com/powerbi_templates/age_analysis.pbit) | | Full dashboard template | Administrations, Debt collection cases, Debtors, Payments, Invoices, Messages | [Full dashboard template](https://backend.paytsoftware.com/powerbi_templates/full_dashboard.pbit) | # Rate limits Source: https://docs.paytsoftware.com/api/rate-limits The Payt API allows 10 requests per second per access token. The API allows **10 requests per second**. When you exceed the limit, the request is rejected with `429 Too Many Requests` and no data is returned. When you receive a `429`, wait before retrying. Use exponential backoff: increase the wait between successive retries instead of retrying immediately. The [import endpoints](/imports/overview) have a separate limit of 3 files per second and also return `429` when exceeded. # Responses Source: https://docs.paytsoftware.com/api/responses How create and update endpoints (POST/PATCH) report success, partial failures, and fatal errors. Endpoints that create or update data (POST/PATCH) accept multiple records per request. The response tells you how many records were processed and which ones failed. ## Fatal errors If Payt cannot process the request at all (for example, the request body is malformed or required parameters are missing), it returns a `422 Unprocessable Entity` error and no records are processed. Authentication and permission problems return `401` or `403` with an error body: ```json theme={null} { "code": "forbidden", "message": "Missing permission: invoices:write" } ``` ## Success with partial errors If Payt can process the request but encounters errors on individual records (e.g., it cannot find an invoice in the update invoices endpoint), it skips those records and processes the rest. The response still returns `success: true`, so **always check the `errors` object**: an empty object means all records were processed. **Response:** ```json theme={null} { "count": 10, "errors": { "not_found": [ "invoice_number_that_could_not_be_found" ] }, "success": true } ``` | Key | Value | | ---------- | -------------------------------------------------------------------------------------------------------- | | `success` | Whether the request was handled. | | `count` | Number of records processed successfully (those without errors). | | `errors` | Records that could not be processed, with the reasons. Keys identify the record or the type of failure. | | `warnings` | Records that were processed only partially, with warning messages. Only present when there are warnings. | # Testing Source: https://docs.paytsoftware.com/api/testing Try the Payt API against the demo environment and get started quickly with Postman. ## Demo environment Testing can be done on `demo.paytsoftware.com`: create a free account via the regular sign up. The only difference between production and demo is the two subdomains. To use the examples in this documentation, replace the production domains with their demo equivalents: | Production | Demo | | -------------------- | ------------------------- | | app.paytsoftware.com | demo.paytsoftware.com | | api.paytsoftware.com | demo-api.paytsoftware.com | Demo and production are fully separate environments. Tokens, applications, and data from one do not carry over to the other. ## Postman This Postman collection helps you get started with the Payt API. The collection includes setup documentation under its `Edit` tab. Fork the Payt API collection into your workspace and start making requests. # Applications Source: https://docs.paytsoftware.com/authentication/applications Create and manage OAuth applications on the Connections page in the company settings menu. In the company settings menu you can find the `Connections` page. Here you can create and manage your OAuth applications and connections. Every user with company-wide admin privileges can view, create and edit applications. It might be desirable to create a separate Payt company with only a few users in order to isolate access to your applications. ## Name The name of the application should be one that is recognizable by your users. It should probably be the name of your app. ## Grant type This is the authorization strategy used by the application. Using the `authorization_code` strategy is recommended since it is more secure. In some cases this strategy cannot be used: * when the redirect flow during the authorization process is not possible * when the `client_secret` cannot be kept secret from end users in local installations * when the continuous refreshing of the access token with the refresh token cannot be implemented. For these scenarios it is possible to request an access token that does not expire. It works like a static API token and can be [used as a regular access token](/authentication/tokens#use-an-access-token--static-api-token). In order to mitigate some of the risks of a static token the IP-addresses allow list is required. | | `authorization_code` | `client_credentials` | | ------------------------- | -------------------- | ---------------------------------- | | access token timeout | 2 hours | never | | uses refresh tokens | yes | no | | IP-addresses allow list | optional | required | | `redirect_uri` | required | not relevant | | connection can be made by | all companies | only the company that owns the app | This setting cannot be changed once the application has been created. ### Requesting a `client_credentials` access token Applications using the `client_credentials` strategy fetch their access token directly from the token endpoint, using [Basic authorization](/authentication/basic-authorization). No user interaction is required. ```http theme={null} POST https://api.paytsoftware.com/oauth/token Authorization: Basic cS1ReW5uYkREWFZGSkNIVVBnNThFV0hIMm41a0NXYVdZZUo1bFZRTkk3QTpNcTRFMlZGTnNzcjVpQTdaN0xBZFM4MnZtNTl3Qm9nNVE1SGw2Si1Pc0w0 { "grant_type": "client_credentials" } ``` ```bash theme={null} curl --header 'Authorization: Basic cS1ReW5uYkREWFZGSkNIVVBnNThFV0hIMm41a0NXYVdZZUo1bFZRTkk3QTpNcTRFMlZGTnNzcjVpQTdaN0xBZFM4MnZtNTl3Qm9nNVE1SGw2Si1Pc0w0' \ --form 'grant_type=client_credentials' \ --request POST https://api.paytsoftware.com/oauth/token ``` The returned access token does not expire and contains no refresh token. Use it [as a regular access token](/authentication/tokens#use-an-access-token--static-api-token). ## Redirect URI The [`redirect_uri`](https://tools.ietf.org/html/rfc6749#section-3.1.2) is the URL that your users are sent to after they complete the authorization process. This is probably a specific route to your app by which you can identify requests from our server, for example: `https://example.com/callbacks/payt` or `https://example.com/oauth/callbacks?provider=payt`. If you change the `redirect_uri`, do not forget to update the `redirect_uri` parameter in the `authorize_url` and the request to create an access token. Otherwise a `400 bad_request` error will be returned during the authorization process. ## IP-addresses allow list When 1 or more addresses are defined, then each API request is validated to originate from one of those IPs. If a request with a valid access token is sent to the API from an unauthorized IP address, the access token will be revoked and a `403 forbidden` response will be returned. An email will also be sent to the application notification email addresses whenever a valid request from an unauthorized IP address is detected. ## Permissions Select the permissions your app requires. There is no limit to the number of permissions you can select, but it is advisable to select the minimal set your app requires. Users will have to explicitly grant the permissions you request. The fewer you request, the higher the chance a user will grant them. Read more on the consequences of updating permissions [here](/authentication/permissions). ## Client ID When the application is created, a `client_id` is generated. This `client_id` uniquely identifies your application. This ID is not secret; it is accessible to your users. ## Client secret When the application is created, a `client_secret` is generated. This secret is shown only after the application has just been created. It should be stored securely on the client and only used for a few specific calls to the server. Do NOT include it as a parameter in the `authorize_url`. The `client_secret` can be rotated at any moment. The moment it is rotated, all currently valid access tokens will remain valid until they expire. But to fetch a new access token, the new `client_secret` must be supplied. By refreshing all access tokens just before rotating the secret, a time window can be created in which the `client_secret` can be rotated while current authorizations remain active. # Authorization Source: https://docs.paytsoftware.com/authentication/authorization Authorize your app using the OAuth2 Authorization Code flow, or fall back to a static API token. Payt uses the [OAuth2 Authorization Code](https://tools.ietf.org/html/rfc6749#section-4.1) flow for the authorization process of its public API. When unable to support OAuth2, it is also possible to use a static API token. This approach is less secure though. In order to start the authorization process you need to have an [application](/authentication/applications). Check there how to create one if you didn't do so already. Your users should be able to start the authorization process from within your app. A button or link should take them to the authorization form. Here users can authorize your app to access their Payt company. They see the list of permissions your app requests and they can select which administrations they grant access to. Or they can allow your app access to all current and future administrations of their company. If the user is already logged into their Payt user account they are immediately directed to the authorization form. Otherwise they have to go through the regular Payt login first. When editing an application, you'll find an example authorization link that takes you to the authorization form your users will see. The url contains all parameters the server requires. **[Request](https://tools.ietf.org/html/rfc6749#section-4.1.1) initiated by the client:** ```http theme={null} GET https://app.paytsoftware.com/oauth/authorize?redirect_uri=https%3A%2F%2Fexample.com%2Fcallbacks%2Fpayt&response_type=code&client_id=q-QynnbDDXVFJCHUPg58EWHH2n5kCWaWYeJ5lVQNI7A&scope=debtors%3Aread%20invoices%3Aread&state=mbjk17r01c ``` | Parameter | Presence | Definition | | --------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `client_id` | required | The client\_id of the application. | | `redirect_uri` | required | The URL your users are sent to after they complete the authorization process. | | `response_type` | required | Must be: `code` | | `state` | required | Random set of characters. This value will be returned by the Payt server and should be validated on the client side to prevent CSRF attacks. | | `scope` | optional | When the parameter is not supplied, the scopes as defined by the application will be used. When the parameter is present, it must contain a subset of the scopes defined by the application. When multiple scopes are supplied, they must be joined into a single String separated by spaces. | After submitting the authorization form, the server will redirect the user to the `redirect_uri` you provided. The `state` value that was provided by the client is returned and must be checked by the client in order to prevent attackers from initiating requests. Payt will add the `code` parameter to the redirect\_uri. The client must then complete the authorization process by sending a POST request to the token endpoint (`/oauth/token`). This request must include the `code` that was just received. The server will then generate the first [token](/authentication/tokens) and return it in the response. The `code` expires after 10 minutes. If the client fails to fetch the first token within that window, the authorization process fails and the user has to go through it again. **[Request](https://tools.ietf.org/html/rfc6749#section-4.1.2) initiated by the server** ```http theme={null} GET https://example.com/callbacks/payt?code=lupjwsFG3RMGoIJAKkQBMGjs4bDuW4OP3NAqv_2XZ5o&state=mbjk17r01c ``` **Your app must make the following [request](https://tools.ietf.org/html/rfc6749#section-4.1.3)** ```http Request theme={null} POST https://api.paytsoftware.com/oauth/token Authorization: Basic cS1ReW5uYkREWFZGSkNIVVBnNThFV0hIMm41a0NXYVdZZUo1bFZRTkk3QTpNcTRFMlZGTnNzcjVpQTdaN0xBZFM4MnZtNTl3Qm9nNVE1SGw2Si1Pc0w0 { "code": "lupjwsFG3RMGoIJAKkQBMGjs4bDuW4OP3NAqv_2XZ5o", "grant_type": "authorization_code", "redirect_uri": "https://example.com/callbacks/payt" } ``` ```bash cURL theme={null} curl --header 'Authorization: Basic cS1ReW5uYkREWFZGSkNIVVBnNThFV0hIMm41a0NXYVdZZUo1bFZRTkk3QTpNcTRFMlZGTnNzcjVpQTdaN0xBZFM4MnZtNTl3Qm9nNVE1SGw2Si1Pc0w0' \ --form code=lupjwsFG3RMGoIJAKkQBMGjs4bDuW4OP3NAqv_2XZ5o \ --form grant_type=authorization_code \ --form redirect_uri=https://example.com/callbacks/payt \ --request POST https://api.paytsoftware.com/oauth/token ``` | Header | Presence | Definition | | --------------- | -------- | -------------------------------------------- | | `Authorization` | required | [Basic](/authentication/basic-authorization) | | Parameter | Presence | Definition | | -------------- | -------- | ----------------------------------------------------------------------------- | | `code` | required | Must be the code that was included in the url. | | `grant_type` | required | Must be: `authorization_code` | | `redirect_uri` | required | The URL your users are sent to after they complete the authorization process. | **[Response](https://tools.ietf.org/html/rfc6749#section-4.1.4) from the server** ```json theme={null} { "access_token": "IBzLDErQvt9gOmSLarUtDy06emduHZmKEG2OSPdHpJ8", "created_at": 1585820684, "expires_in": 7200, "refresh_token": "2_L56FQ1Sl6db15XJuO14KysWEwGhwaMsVeUegGBxfI", "scope": "invoices:read debtors:read", "token_type": "Bearer" } ``` | Key | Value | | --------------- | -------------------------------------------------------------- | | `access_token` | The token that can be used to authenticate API requests. | | `created_at` | The unix time at which the token was created. | | `expires_in` | The number of seconds the access token is valid. | | `refresh_token` | The new refresh\_token, must be used to create the next token. | | `scope` | List of granted permissions. | | `token_type` | Will always be `Bearer`. | At the very minimum your app must store the access token and refresh token. The access token is required to use the API, the refresh\_token to create a new token. It is recommended to also store the expiration time of the access token. It allows you to request a new token just before the current token expires, minimizing the number of requests needed. More information on how to use tokens can be found [here](/authentication/tokens). ## Re-authorization After the authorization process has been completed, it can always be started again. When completed, all tokens from the previous authorization are immediately removed. Also the previously granted scopes and administrations are removed and replaced by what is authorized during this last process. Under normal conditions it should not be required for a user to go through this process more than once. It can however be initiated by the client when the refresh\_token is lost or when it expired. # Basic Authorization Source: https://docs.paytsoftware.com/authentication/basic-authorization Almost all API endpoints require the access_token to be sent as a Bearer token. The token endpoints and the sign_up endpoint require the Basic token. The value for the authorization header consists of the word "Basic", followed by a space, followed by the Base64-encoded version of the client\_id and the client\_secret. The client\_id and client\_secret must be separated by a single colon ":". The [RFC 4648](https://tools.ietf.org/html/rfc4648) version of Base64 is required. ```javascript theme={null} var clientId = "q-QynnbDDXVFJCHUPg58EWHH2n5kCWaWYeJ5lVQNI7A" var clientSecret = "Mq4E2VFNssr5iA7Z7LAdS82vm59wBog5Q5Hl6J-OsL4" var base64Encoded = btoa(clientId + ":" + clientSecret) var authorizationHeaderValue = "Basic " + base64Encoded console.log(authorizationHeaderValue) => Basic cS1ReW5uYkREWFZGSkNIVVBnNThFV0hIMm41a0NXYVdZZUo1bFZRTkk3QTpNcTRFMlZGTnNzcjVpQTdaN0xBZFM4MnZtNTl3Qm9nNVE1SGw2Si1Pc0w0 ``` # Permissions Source: https://docs.paytsoftware.com/authentication/permissions Permissions define which Payt resources your app can access. They are implemented as OAuth2 scopes. Permissions define which Payt resources your app can access and which actions can be performed on those resources. Permissions are implemented using [OAuth2 scopes](https://tools.ietf.org/html/rfc6749#section-3.3). The words permissions and scopes can be used interchangeably. If your app performs an action on a resource it does not have permission for, a `403 forbidden` response will be returned. The response message will include the name of the permission your app requires in order to perform the action. Users can, at any moment, change the permissions they granted to your app. Your client should be able to handle 403 responses and inform users that a particular action cannot be performed until they enable the corresponding permission. ## List all permissions A list of all currently available permissions can be found on the application create/edit form. ## View granted permissions The permissions that are granted on a specific authorization are returned each time a new token is [created](/authentication/tokens#create-tokens) or by sending an existing token to the [introspect](/authentication/tokens#introspect-a-token) endpoint. The response contains, among other data, a space separated list of all granted permissions. ## Add permissions Permissions can be added to an application using the edit form in the Payt interface. This will have no direct impact on any existing authorizations. All current authorizations and tokens will remain valid, but will not include the new permission automatically. Users will have to explicitly grant this new requested permission through the Payt UI. Payt will not actively inform users about this change. If you use the `scope` parameter in the authorize\_url, remember to include this new scope in the parameters. Otherwise users will not be asked to grant them during the authorization process. If you do not supply the `scope` parameter, then no further action is required, as the authorization process will automatically include this new scope. ## Remove a permission An existing permission can be removed from an Application using the edit form in the Payt interface. This scope is immediately removed from all existing authorizations and tokens. A `403 forbidden` will be returned on all endpoints requiring this scope, even for previously created and still valid tokens. Users do not have to take any action and are not informed. If you re-add the same scope in the future, all users will have to grant the scope explicitly, even if they authorized it in the past. If you use the `scope` parameter in the authorize\_url, remember to remove this scope. Otherwise a `400 bad_request` error will be raised during the authorization process. If you do not supply the `scope` parameter, no further action is required as the authorization process will automatically leave out any removed scope. # Tokens Source: https://docs.paytsoftware.com/authentication/tokens How Payt's access and refresh tokens work, and how to create, introspect, and use them. To authorize API requests, you use an [access token](https://tools.ietf.org/html/rfc6749#section-1.4). If you use the Authorization Code flow, you also receive a [refresh token](https://tools.ietf.org/html/rfc6749#section-1.5) to obtain new access tokens. Access tokens are the proof of authorization that our API requires. They must be added to the `Authorization` header of each request to the Payt API. Each time you need a new access token, you must use the refresh token to request a new one. If your refresh token expires, the user needs to authorize your app again. In order to prevent this, a new refresh token is returned each time a new access token is created. This way your app remains authorized as long as it is used frequently. | Token | Expiry | Notes | | ------------- | ------- | ------------------------------------------------------------------------------------------- | | Access token | 2 hours | Must be refreshed using the refresh token after expiry. | | Refresh token | 90 days | Rotated on every use; a new refresh token is returned each time you create an access token. | As long as your app requests a new access token at least once every 90 days, the refresh token never expires in practice. ## Create tokens A new set of tokens can be created by sending a request to the token endpoint (`/oauth/token`) using the last received refresh token. The very first refresh token is received during the [confirmation step](/authentication/authorization#confirm-the-authorization) of the authorization process. **Request:** ```http Request theme={null} POST https://api.paytsoftware.com/oauth/token Authorization: Basic cS1ReW5uYkREWFZGSkNIVVBnNThFV0hIMm41a0NXYVdZZUo1bFZRTkk3QTpNcTRFMlZGTnNzcjVpQTdaN0xBZFM4MnZtNTl3Qm9nNVE1SGw2Si1Pc0w0 { "grant_type": "refresh_token", "refresh_token": "PKWuvzHNj3ALI0G7QNBGjBI1-q3aMLZBqgXdaaumk18" } ``` ```bash cURL theme={null} curl --header 'Authorization: Basic cS1ReW5uYkREWFZGSkNIVVBnNThFV0hIMm41a0NXYVdZZUo1bFZRTkk3QTpNcTRFMlZGTnNzcjVpQTdaN0xBZFM4MnZtNTl3Qm9nNVE1SGw2Si1Pc0w0' \ --form 'grant_type=refresh_token' \ --form 'refresh_token=PKWuvzHNj3ALI0G7QNBGjBI1-q3aMLZBqgXdaaumk18' \ --request POST https://api.paytsoftware.com/oauth/token ``` | Header | Presence | Definition | | --------------- | -------- | -------------------------------------------- | | `Authorization` | required | [Basic](/authentication/basic-authorization) | | Parameter | Presence | Definition | | --------------- | -------- | ---------------------------------------- | | `grant_type` | required | Must be: `refresh_token`. | | `refresh_token` | required | Must be the last refresh token received. | **Response:** ```json theme={null} { "access_token": "2GyChYPFxhYOis/uiLoVkA==", "created_at": 1577836800, "expires_in": 7200, "refresh_token": "PKWuvzHNj3ALI0G7QNBGjBI1-q3aMLZBqgXdaaumk18", "scope": "invoices:read debtors:read", "token_type": "Bearer" } ``` | Key | Value | | --------------- | ------------------------------------------------------------- | | `access_token` | The token that can be used to authenticate API requests. | | `created_at` | The UNIX time at which the token was created. | | `expires_in` | The number of seconds the access token is valid. | | `refresh_token` | The new refresh token, must be used to create the next token. | | `scope` | List of granted permissions. | | `token_type` | Will always be `Bearer`. | ## Introspect a token Besides the scopes that are granted, you might want to know for which company and which administrations of this company the authorization was granted. This information can be retrieved by sending an active token (either an access token or refresh token) to the [introspect](https://tools.ietf.org/html/rfc7662) endpoint. **[Request](https://tools.ietf.org/html/rfc7662#section-2.1)** ```http Request theme={null} POST https://api.paytsoftware.com/oauth/introspect Authorization: Basic cS1ReW5uYkREWFZGSkNIVVBnNThFV0hIMm41a0NXYVdZZUo1bFZRTkk3QTpNcTRFMlZGTnNzcjVpQTdaN0xBZFM4MnZtNTl3Qm9nNVE1SGw2Si1Pc0w0 { "token": "IBzLDErQvt9gOmSLarUtDy06emduHZmKEG2OSPdHpJ8" } ``` ```bash cURL theme={null} curl --header 'Authorization: Basic cS1ReW5uYkREWFZGSkNIVVBnNThFV0hIMm41a0NXYVdZZUo1bFZRTkk3QTpNcTRFMlZGTnNzcjVpQTdaN0xBZFM4MnZtNTl3Qm9nNVE1SGw2Si1Pc0w0' \ --form token=IBzLDErQvt9gOmSLarUtDy06emduHZmKEG2OSPdHpJ8 \ --request POST https://api.paytsoftware.com/oauth/introspect ``` **[Response](https://tools.ietf.org/html/rfc7662#section-2.2)** ```json theme={null} { "active": true, "administrations": [ { "id": "123", "name": "Administration Name" }, { "id": "321", "name": "Administration Two Name" } ], "client_id": "q-QynnbDDXVFJCHUPg58EWHH2n5kCWaWYeJ5lVQNI7A", "company": { "id": "123", "name": "Company Name" }, "exp": 1577844000, "iat": 1577836800, "scope": "invoices:read debtors:read", "token_type": "Bearer" } ``` | Key | Value | | ----------------- | ---------------------------------------------------------------------------- | | `active` | Whether the access token (not the refresh token) is still valid. | | `administrations` | List of administration ids and names the token is granted access to. | | `client_id` | The client\_id of the application. | | `company` | The id and name of the company the token is granted access to. | | `exp` | The UNIX time at which the access token (not the refresh token) will expire. | | `iat` | The UNIX time at which the token was created. | | `scope` | List of granted permissions. | | `token_type` | Will always be `Bearer`. | If the given token has expired, does not belong to your client or does not exist, the following response will be returned: **Response:** ```json theme={null} { "active": false } ``` ## Use an access token / static API token To query the Payt API an active access token must be added to the `Authorization` header, preceded by `Bearer`: ```http Request theme={null} GET https://api.paytsoftware.com/v1/invoices?administration_id=123 Authorization: Bearer IBzLDErQvt9gOmSLarUtDy06emduHZmKEG2OSPdHpJ8 ``` ```bash cURL theme={null} curl https://api.paytsoftware.com/v1/invoices?administration_id=123 \ --header 'Authorization: Bearer IBzLDErQvt9gOmSLarUtDy06emduHZmKEG2OSPdHpJ8' ``` # CSV Source: https://docs.paytsoftware.com/imports/csv Information about the outstanding items can be provided in a CSV file. In this chapter you can read how to build the CSV file, how the file is processed. ### Structure of the CSV file * File encoding must be UTF-8. * CSV format specification RFC 4180 ([http://tools.ietf.org/html/rfc4180](http://tools.ietf.org/html/rfc4180)) serves as a guideline. * Separator can be semicolon (;) or comma (,). * (Text) fields must be enclosed in double quotation marks (“). * When using double quotation marks to enclose fields, double quotation marks in a field must be escaped by prefixing it with another double quotation mark. * Field length is max. 255 characters. * The first line is reserved for the column headers. * A number of columns are mandatory, these are indicated in bold. * Unused columns do not need to be included in the CSV file. * The order of columns is not important. ### Processing * The CSV file must present all invoices that must be processed by Payt for sending, reminding, etc. Please note that filtering from the accounting system on only "outstanding items" can sometimes be incomplete. For example, when an invoice is created within 24 hours and immediately matched with a cash payment. At the time of export, this invoice will no longer be in the outstanding items, while Payt may still have to send the invoice. As a guideline, Payt recommends that invoices must appear in the CSV file for a month, to minimize the risk of missing invoices, credit notes or zero invoices. * Payments are calculated and registered based on the outstanding amount of the invoice. * When an invoice has disappeared from the import, Payt marks the invoice as paid. * This means that empty CSV files are interpreted as there are no outstanding invoices. So all invoices are seen as paid. A setting is available in the application that can serve as protection for loading an empty file. ## Data types | Type | Description | Example | | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | | boolean | "0" or "false" for false and "1" or "true" for true | false | | country\_code | ISO 3166-1 Alpha-2 code | NL | | currency\_code | ISO 4217 three letter code | EUR | | date | yyyy-mm-dd | 2020-12-17 | | integer | Whole number | 7 | | decimal | Maximum two decimal places; point separated | 12345.78 | | email\_address | email address; is validated against a pattern | [info@example.com](mailto:info@example.com) | | gender\_code | "f" or "female" for female and "m" or "male" for male | female | | JSON | Any valid JSON content (make sure the content is properly escaped text content in the CSV, see: [Structure of the CSV file](/imports/csv#structure-of-the-csv-file)) | \{ "key": "value" } | | language\_code | ISO 639-1 two letter language code | nl | | phone\_number | The preferred input is the international version. The number will be validated, which might result in a warning in the interface, but never in an error. Numbers without a country code are assumed to be national phone numbers in the country of the administration. | +31612345678 | | postal\_code | Postal code/zipcode; is required and validated against a pattern for the following countries: NL, BE, DE, FR, LU | 1234AB | | text | Maximum 255 characters | abc def | ## Headers | Name (**bold** = required; **bold**1 = conditionally required — see footnote) | Description | Data type | | ---------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | | **administration\_code** | The unique human readable identifier of the administration. This value must be set in the corresponding administration within Payt. | text | | **debtor\_code** | The unique human readable identifier of the debtor. | text | | debtor\_origin\_id | A unique unchanging identifier of the debtor. \[NB - If not submitted the debtor\_code will be used instead, this means the debtor\_code is allowed to be changed.] | text | | **debtor\_company\_name**1 | Company name | text | | debtor\_is\_company | Whether the debtor is a company/organization or a private individual | boolean | | **debtor\_firstname**1 | First name | text | | debtor\_middlename | Middle name | text | | debtor\_infix | Insertion | text | | debtor\_suffix | Suffix of the debtor name | text | | **debtor\_lastname**1 | Last name | text | | debtor\_gender | Gender of the debtor | gender\_code | | debtor\_birth\_date | Birth date of the debtor | date (YYYY-MM-DD) | | debtor\_country\_code | The nationality or country of residence of the debtor. This is not the debtor's postal address country code; use `debtor_post_country_code` for the postal address country. | country\_code | | debtor\_title | Title to address the debtor. Eg: “Dr.”, “Mr.” or “Ms.”. It is recommended to only use this field in exceptional cases, since this field is not translated. If not given a title such as Mrs., Mr. or Mr. / Mrs. is used, depending on the `debtor_gender` field, which is also translated into the language of the debtor. | text | | debtor\_category | The application can be filtered by debtor category. In this way, a distinction can be made between different groups of debtors. The delivered value is considered as one category, multiple categories are not possible. | text (max 50 characters) | | debtor\_coc\_number | Chamber of Commerce number or for Ireland: company number (CRO) or for UK: company registration number (CRN) | text | | debtor\_vat\_number | VAT number | text | | debtor\_oin\_number | Government identification number (for delivering invoice UBLs via the PEPPOL network) | text | | debtor\_peppol\_identifier | PEPPOL identifier for the debtor (for delivering invoice UBLs via the PEPPOL network). Examples: NL:KVK:123456789 or 0106:123456789 | text | | debtor\_gln\_number | Global Location Number (GLN) of the debtor; a 13-digit identifier used in supply chain and e-invoicing (e.g. for PEPPOL) | text | | debtor\_meta\_data | Meta data as key-value pairs that will be rendered in the debtor details column on the debtor page | JSON | | **debtor\_post\_street\_1** | Address line 1 (street and house number) | text | | debtor\_post\_street\_2 | Address line 2 | text | | **debtor\_post\_postalcode** | The postal code of the post address | postal\_code | | **debtor\_post\_city** | The city of the post address | text | | **debtor\_post\_country\_code** | The country code of the post address | country\_code | | debtor\_post\_region | The region code of the post address | text | | debtor\_sms\_number | Number for text reminders | phone\_number | | debtor\_phone\_number | Number for robocalls | phone\_number | | debtor\_email | General email address | email\_address | | debtor\_invoice\_email | Invoice email address | email\_address | | debtor\_invoice\_cc\_email | Invoice cc email address | email\_address | | debtor\_invoice\_bcc\_email | Invoice bcc email address | email\_address | | debtor\_labels | Label names separated by a comma. Will create labels and assign or remove them from debtors when this is enabled for an administration. | text | | debtor\_origin\_url | URI which is used to guide the user from Payt to the URI of the debtor in the origin administration | text | | debtor\_reminder\_email | Reminder email address | email\_address | | debtor\_reminder\_cc\_email | Reminder cc email address | email\_address | | debtor\_reminder\_bcc\_email | Reminder bcc email address | email\_address | | debtor\_language\_code | The language in which to communicate with the debtor | language\_code | | debtor\_payment\_condition | A unique identifier from the source system. The identifiers can be mapped to flows via the interface. | text | | debtor\_relation\_manager | The relation/account manager of the debtor | text | | debtor\_credit\_limit\_amount | The maximum sum of invoice open amount the debtor is allowed to accumulate. When provided the value should be zero or greater than zero. Zero means no open amount is allowed. | decimal | | debtor\_allow\_invoice\_emailing\_override | When a value is provided for this property then it will override the setting as known in Payt. If set to false then no invoices will be sent by email and will therefore fallback to sending invoices by snail mail. | boolean | | debtor\_allow\_reminder\_emailing\_override | When a value is provided for this property then it will override the setting as known in Payt. If set to false then no reminders will be sent by email and will therefore fallback to sending invoices by snail mail. | boolean | | **invoice\_number** | The unique human readable identifier of the invoice. | text | | invoice\_description | Invoice description | text | | **invoice\_date** | The accounting date of the invoice. | date | | **invoice\_due\_date** | The date at which the invoice should be paid. | date | | **invoice\_total\_amount\_inc\_vat** | The full, original amount in the currency of the invoice, including VAT. As it should be paid by the debtor. | decimal | | **invoice\_open\_amount\_inc\_vat** | The current payable amount in the currency of the invoice, including VAT | decimal | | invoice\_currency\_code | Currency of specific invoice. If this column is added, it must be filled. Outstanding amount payments are calculated and registered | currency\_code | | invoice\_book\_amount\_total | The full, original amount in the accounting currency of the administration, including VAT. If this column is added, it must be filled. | decimal | | invoice\_book\_amount\_open | The current payable amount in the accounting currency of the administration, including VAT. If this column is added, it must be filled. | decimal | | administration\_book\_currency\_code | The accounting currency of the administration. This must match the currency as set within Payt. | currency\_code | | invoice\_labels | Label names separated by a comma. Will create labels and assign or remove them from invoices when this is enabled for an administration. | text | | invoice\_last\_payment\_date | The payment date of the most recent payment on the invoice. | date | | invoice\_category | The application can be filtered by invoice category. In this way, a distinction can be made between different categories of invoices. The delivered value is considered as one category. | text (max 50 characters) | | invoice\_order\_number | Order number | text | | invoice\_origin\_id | A unique unchanging database identifier of the invoice. | text | | invoice\_peppol\_identifier | PEPPOL identifier for the invoice (for delivering UBLs via the PEPPOL network). Examples: NL:KVK:123456789 or 0106:123456789 | text | | invoice\_gln\_number | Global Location Number (GLN) for the invoice; a 13-digit identifier used in supply chain and e-invoicing (e.g. for PEPPOL) | text | | invoice\_origin\_url | URI which is used to guide the user from Payt to the URI of the invoice in the origin administration. | text | | invoice\_reference | An additional reference by which the debtor can recognize the invoice. | text | | invoice\_payment\_reference | A custom payment reference which will be used for emails, letters, debtor portal and online payments | text | | invoice\_purchase\_order\_number | Purchase number | text | | invoice\_payment\_condition | A unique identifier from the source system. The identifiers can be mapped to flows via the interface. This value will take precedence over the debtor\_payment\_condition. | text | | invoice\_payment\_method | One of: 'bank\_transfer', 'direct\_debit', 'cash' | text | | invoice\_payment\_term | The number of days within which the invoice must be paid. When not provided it is calculated as the number of days between the invoice\_date and the due\_date. | integer | | invoice\_paused | Whether the invoice should be paused. Invoices paused by this column cannot be unpaused in the app, but only by a new import where this column is set to false | boolean | | invoice\_contact\_origin\_id | A unique unchanging identifier of the contact. \[NB - Mandatory when invoice-specific contact person is present!] | text | | invoice\_contact\_sms\_phone\_number | Number for text reminders of invoice-specific contact person | phone\_number | | invoice\_contact\_call\_phone\_number | Number for robocalls of invoice-specific contact person | phone\_number | | invoice\_contact\_default\_email\_address | General email address of invoice-specific contact person | email\_address | | invoice\_contact\_invoice\_email\_address | Invoice email address of invoice-specific contact person | email\_address | | invoice\_contact\_invoice\_cc\_email\_address | Invoice cc email address of invoice-specific contact person | email\_address | | invoice\_contact\_invoice\_bcc\_email\_address | Invoice bcc email address of invoice-specific contact person | email\_address | | invoice\_contact\_reminder\_email\_address | Reminders email address of invoice-specific contact person | email\_address | | invoice\_contact\_reminder\_cc\_email\_address | Reminders cc email address of invoice-specific contact person | email\_address | | invoice\_contact\_reminder\_bcc\_email\_address | Reminders bcc email address of invoice-specific contact person | email\_address | | invoice\_contact\_gender | Gender of invoice-specific contact person | gender\_code | | invoice\_contact\_firstname | First name of invoice-specific contact person | text | | invoice\_contact\_middlename | Middle name of invoice-specific contact person | text | | invoice\_contact\_infix | Insertion last name of invoice-specific contact person | text | | invoice\_contact\_lastname | Last name of invoice-specific contact person \[NB - first name or last name Mandatory when using invoice-specific contact person!] | text | | invoice\_contact\_post\_street\_1 | Address line 1 of invoice-specific contact person | text | | invoice\_contact\_post\_street\_2 | Address line 2 of invoice-specific contact person | text | | invoice\_contact\_post\_postalcode | Postcode of invoice-specific contact person | postal\_code | | invoice\_contact\_post\_city | Place of invoice-specific contact person | text | | invoice\_contact\_post\_country\_code | Country code of invoice-specific contact person | country\_code | | invoice\_contact\_post\_region | Region of invoice-specific contact person | text | | payments | See [payments](#payments) | JSON | | invoice\_lines | See [invoice\_lines](#invoice-lines) | JSON | ### Debtor The `debtor_*` fields must be delivered consistently for all invoices. E.g. the postal address must be the same for all invoices from the same debtor, as must fields like emails, phone numbers, relation manager, etc. If it is desirable to use a different address for different invoices from one debtor, the `invoice_contact_*` fields can be used. #### Language code The languages Dutch, German, English, French, Spanish, Italian and Polish are supported in the application. When a different language code is supplied, the application falls back to the language set as fallback on the administration. When Dutch is used for Belgian customers, Flemish is used. #### 1 Name and address fields At least one of the following combinations must be provided: * `debtor_company_name` (alone), **OR** * Both `debtor_firstname` AND `debtor_lastname` together ### Invoice-specific contact person It is possible to assign an invoice-specific contact person to an invoice. If an invoice has an invoice-specific contact person, the details of the contact person will be used instead of the details of the debtor. Note: If there is an invoice-specific contact person, the fields `invoice_contact_origin_id` and (`invoice_contact_firstname` or `invoice_contact_lastname`) must both be filled. The `invoice_contact_origin_id` field contains the unique source ID of the contact. If `invoice_contact_origin_id` is filled, but the name is missing, the invoice-specific contact person will not be loaded and a validation error will be displayed. Keep in mind that the corresponding invoice and debtor will be loaded in this case. If no specific email address for sending invoices is known for the contact person, the email address for sending invoices of the debtor is used. If this address is also unknown, the general email address of the contact person will be used. Finally, if no general email address of the contact person is known, the general email address of the debtor is used. If no specific email address for sending reminders is known for the contact person, the email address for sending reminders from the debtor is used. If this address is also unknown, the general email address of the contact person will be used. Finally, if no general email address of the contact person is known, the general email address of the debtor is used. ### Payments If no payments are provided Payt will create one based on the difference between total and open amount of the invoice. This payment created by Payt only contains the paid amount and a date, the date of the import. The payments field allows you to take control of the payments that will be created. It also allows you to update existing payments. There are a few things to note when providing the payments: * all payments of the invoice must be provided, also the historical ones. This allows Payt to recognize when payments have been changed or destroyed in the bookkeeping system and apply these changes. * the payments must be ordered chronologically with the oldest first * the sum of the payment amounts must be equal to the difference between the total and open amount of the invoice. | Type | Description | Example | | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | | **origin\_identifier** | The database identifier of the payment. This identifier must be unique within the administration. | 35087345 | | **payment\_date** | The date at which the payment/transaction took place. | 2025-03-31 | | **amount** | The amount that was paid, in the currency of the invoice. | 20.56 | | book\_amount | The amount that was paid, in the currency of the administration. If not provided this will be calculated using the exchange rate between the total\_amount and book\_total\_amount of the invoice. This property becomes required when `transaction_type` is "revaluation". | 20.56 | | transaction\_type | The type of booking. This indicates whether it was an actual payment or if there was a different reason to change the open amount of the invoice. The values can be one of: "payment", "reversal", "credit", "write\_off", "settlement", "revaluation". Note that for "revaluation" the value of `amount` must be zero and `book_amount` must be non-zero. | reversal | | payment\_method | The method that was used to perform the payment. This is only relevant when the `transaction_type` is "payment". | bank\_transfer | | reversal\_code | The code provided by the bank which indicates the reason why the direct debit transaction was reversed. This is only relevant when the `transaction_type` is "reversal". | 0654 | ```json theme={null} [ { "origin_identifier": "35087345", "amount": "20.56", "payment_date": "2025-03-31", "transaction_type": "reversal", "reversal_code": "0654" } ] ``` ```csv theme={null} invoice_id,payments 12345,"[{""origin_identifier"":""35087345"",""amount"":""20.56"",""payment_date"":""2025-03-31"",""transaction_type"":""reversal"",""reversal_code"":""0654""}]" ``` For invoices with no payments, an empty array should be provided: ```csv theme={null} invoice_id,payments 12345,"[]" ``` ### Invoice lines Invoice lines describe the products and/or services that are being invoiced. Invoice lines are not required for most of the features within Payt. When you want Payt to create the invoice document or UBL then the invoice lines are required. There are a few things to note when providing the invoice\_lines: * the sum of the amounts in the invoice lines must be equal to the total amount of the invoice. * if changes in the invoice\_lines are detected these changes will automatically be applied. Invoice lines no longer present in the set will be removed. * if an empty set of invoice lines is provided then all invoice\_lines will be removed. * once an invoice is published, it is sent to the debtor, it is no longer allowed to change the invoice lines. | Type | Description | Example | | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | | **description** | Text that describes the product or service that is invoiced. | Office chair - black | | **product\_price** | The price for a single unit of product. | 125.75 | | product\_unit | The unit in which the quantity of the invoiced products are counted. Default value is "piece". | piece | | product\_quantity | The amount of product that is invoiced, in the unit as provided in `product_unit`. Default value is "1". | 24 | | total\_excl\_tax\_amount | The amount invoiced excluding VAT. If this amount is absent it will be calculated from the `total_incl_tax_amount` and `vat_amount`. Either `total_excl_tax_amount`, `total_incl_tax_amount` or both must be provided. | 3018.0 | | total\_incl\_tax\_amount | The amount invoiced including VAT. If this amount is absent it will be calculated from the `total_excl_tax_amount` and `vat_amount`. Either `total_incl_tax_amount`, `total_excl_tax_amount` or both must be provided. | 3651.78 | | **vat\_rate\_code** | The code of the vat rate applied to the invoice line. This vat rate must be present in the administration. | high | | vat\_percentage | The percentage of VAT applied. This percentage must match the percentage that is associated with the vat\_rate\_code. If not supplied the percentage that is associated with the vat\_rate\_code is used. | 21.0 | | vat\_amount | The amount of VAT charged. If not provided it is calculated from the other values. | 633.78 | | line\_order | The position of the invoice\_line within the set of invoice\_lines of the invoice. If the line\_order is not provided then the order in which the lines are provided will be used. If line\_order is provided then each invoice\_line must have a unique integer. | 1 | ```json theme={null} [ { "description": "Office chair - black", "product_price": "125.75", "product_unit": "stuk", "product_quantity": "24", "total_excl_tax_amount": "3018.0", "total_incl_tax_amount": "3651.78", "vat_rate_code": "high", "vat_percentage": "21.0", "vat_amount": "633.78", "line_order": 1 } ] ``` ```csv theme={null} invoice_id,invoice_lines 12345,"[{""description"":""Office chair - black"",""product_price"":""125.75"",""product_quantity"":""24"",""total_excl_tax_amount"":""3018.0"",""vat_rate_code"":""high""}]" ``` ## Changelog | Date | Change | | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 2026-06-16 | Updated Name and address fields description | | 2026-06-16 | Added `debtor_country_code` column | | 2026-04-15 | Added documentation of entries in payments column for invoices without any payments | | 2026-03-17 | Added `debtor_gln_number` and `invoice_gln_number` columns | | 2025-12-03 | Added `debtor_peppol_identifier` and `invoice_peppol_identifier` columns | | 2025-10-13 | Updated the allowed values for the `invoice_payment_method` column | | 2025-10-13 | Added `invoice_lines` column | | 2025-03-31 | Added `payments` column | | 2024-10-07 | Added `debtor_birth_date` column | | 2024-03-08 | Updated Name and address fields description | | 2023-11-16 | Removed `invoice_administration_costs_paid`, `invoice_collection_costs_paid`, `invoice_interest_paid` fields as these fields are only relevant for custom integrations | | 2023-07-27 | Added `invoice_payment_reference` | | 2022-07-07 | Added `invoice_administration_costs_paid`, `invoice_collection_costs_paid`, `invoice_interest_paid` | | 2022-04-12 | Added `invoice_paused` | | 2022-04-08 | Added `debtor_invoice_cc_email`, `debtor_invoice_bcc_email`, `debtor_reminder_cc_email`, `debtor_reminder_bcc_email`, `invoice_contact_invoice_cc_email_address`, `invoice_contact_invoice_bcc_email_address`, `invoice_contact_reminder_cc_email_address`, `invoice_contact_reminder_bcc_email_address` | | 2022-04-01 | Fixed name and description of `invoice_last_payment_date` | | 2022-04-01 | Added `invoice_contact_post_region`, `invoice_payment_method`, `invoice_payment_term`, `debtor_middlename`, `debtor_suffix`, `invoice_origin_id`, `invoice_reference` | | 2022-04-01 | Added `integer` data type | | 2022-03-14 | Added `debtor_meta_data` and JSON data type | | 2021-08-03 | Added `debtor_origin_url` and `invoice_origin_url` | | 2020-12-17 | Added `debtor_allow_invoice_emailing_override` and `debtor_allow_reminder_emailing_override` | | 2020-12-14 | Added `debtor_post_region` | | 2020-07-29 | Changed URL for submission of files to backend.paytsoftware.com | | 2020-06-15 | Added `debtor_credit_limit_amount` | | 2020-05-20 | Added `debtor_title` | | 2020-05-07 | Added a short text on `language_code`. | | 2020-01-06 | Add that an invoice must appear in a CSV file for a month. | | 2019-11-29 | Added short explanation of status codes and about consistency debtor\_\* fields. | | 2019-11-04 | Added `invoice_description` | | 2019-07-30 | Added explanation for uniqueness of different fields. | | 2019-05-09 | Added explanation about fallback logic for invoice and reminder email addresses. | | 2019-05-02 | Removed upload via web. - FTPS removed. - Organize and rename headers. - Update index | | 2019-03-25 | Added `debtor_oin_number` | | 2019-02-01 | Changed the order of valid CSV Headers. | | 2019-01-10 | Removed text \[still in development] from currency fields. | | 2018-12-06 | Renamed `invoice_book_currency_code` to `administration_book_currency_code` | | 2018-11-27 | “Authentication with HTTP basic authentication (to be phased out)” deleted. - Naming of currency fields changed, added “invoice\_” correct name: - `invoice_currency_code`. - `invoice_book_amount_total` - `invoice_book_amount_open` - `invoice_book_currency_code`. | | 2018-11-06 | Added currency fields to CSV headers table | | 2018-10-08 | Expanded and adjusted general passage about double quotation marks | | 2018-09-13 | `debtor_lastname` not obligatory anymore (is now or firstname/infix/lastname) | | 2018-09-11 | Added `invoice_category` | | 2018-07-26 | Text change for uploading files. | | 2018-05-23 | Added `invoice_order_number` - Removed `debtor_invoice_*` fields (Not recommended for general usage), except `debtor_invoice_email`. | | 2018-05-14 | Added `invoice_contact_*` fields - Minimal TLS 1.2 | | 2017-08-28 | Removed `invoice_flow_code` and `debtor_flow_code` | | 2017-06-20 | Added `debtor_is_company` | | 2017-06-01 | Added information about API token for HTTP upload | | 2017-05-03 | Correction specification `debtor_language_code` to ISO 639-1 | | 2017-03-22 | Added `debtor_coc_number` and `debtor_vat_number` | | 2016-10-20 | Changed FTPS address to ftp-debiteurenbeheer.payt.nl | | 2016-10-04 | Endpoint added for the delivery of invoice attachments via the API | | 2016-03-15 | Version Management Added - Index added - `debtor_origin_flow_code` Renamed to `debtor_payment_condition` - `invoice_origin_flow_code` Renamed to `invoice_payment_condition`. | # JSON Source: https://docs.paytsoftware.com/imports/json Submitting the data as JSON is preferable to CSV. The JSON format allows for stricter client side validation, and does not require the repetition of data. In the Payt documentation and interface "CSV" is still often used where it should say "CSV/XML/JSON". ### Schema The formal definition describing how the JSON must be structured. The schema itself contains some basic documentation per element. The schema can be used to build and/or validate json files before submitting them to Payt. This schema is also used by Payt during the import to validate the file before extracting the data. If the file is invalid then the validation errors are presented in the Payt interface. The schema validation is skipped during the import for json files larger than 50MB, because it would impact import performance too much. Validate large files client side before submitting. [Download schema](https://backend.paytsoftware.com/docs/payt_schema.json) ### Complete example This example contains all available fields at least once. [Download example](https://backend.paytsoftware.com/docs/example_complete.json) ### Minimal example This example contains only the required fields. [Download example](https://backend.paytsoftware.com/docs/example_minimal.json) # Imports Source: https://docs.paytsoftware.com/imports/overview Bulk-import invoices and debtors into Payt by submitting data files, declaration files, and PDFs through the import endpoints. Imports let you load data into Payt in bulk. You submit files and Payt processes them automatically. Supported types are data files (CSV, XML), declaration files (MZ301, AP304, ZIP), and PDF/UBL invoice documents. Files are picked up daily, typically around 01:00 AM; the exact time is shown in the import settings of the administration. This page covers the shared rules, endpoints, and request format. For the structure of the data files themselves, see [CSV](/imports/csv), [XML](/imports/xml), and [JSON](/imports/json). ### Basics * HTTP * JSON * Base64 encoding for binary files. * UTF-8 encoding for data files. * SSL is required. Use at least [TLSv1.2](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2). * Files are processed daily, usually around 01:00 AM. The actual time can be found in the import settings of the specific administration. * If no data file is available for the automatic import a notification is added to the import page. * Any PDF files of the original invoices are linked based on the file name. The file name must contain the exact invoice number of the invoice. Example: 141234.PDF can be linked to invoice 141234. In order to link the files properly, a setting on the Payt side must be made by the implementation specialist or the service desk. * In the `Import` tab of the relevant administration within Payt, linking `based on supplied CSV files` and `automatic import` must be enabled. The administration code must also be entered directly. * When using the FTP/SFTP integration, it is also possible to provide files in a zip archive. These archives will automatically be unarchived in the same directory. Note: only files are unarchived, directories within the zip archive will be ignored. * When using the HTTP endpoints, it is also possible to provide gzipped files. Files with a .gz extension will automatically be decompressed before further processing. Make sure the extension of the original file is intact (e.g. 20220728.csv.gz will be decompressed and processed as 20220728.csv). ### Endpoints Submit a POST request to one of the following endpoints, depending on the file type: | File type | Endpoint | | ---------------------------------- | ------------------------------------------------------------------ | | CSV / XML data file | `https://backend.paytsoftware.com/import/files/csv` | | Invoice PDF | `https://backend.paytsoftware.com/import/files/invoice_pdf` | | Invoice UBL | `https://backend.paytsoftware.com/import/files/invoice_ubl` | | Invoice attachment | `https://backend.paytsoftware.com/import/files/invoice_attachment` | | Declaration file (MZ301/AP304/ZIP) | `https://backend.paytsoftware.com/import/files/declaration_file` | Different status codes may be returned when submitting files. If successful, a status code 2xx will be returned. If this is not the case, the delivery of the file was not successful and delivery must be tried again. Please note you can upload at most three files per second. Should you cause more traffic on this endpoint, you will receive a 429 response. The file should then be resubmitted. ### Format of the data Provide the following headers with the POST request: * Accept-Charset: UTF-8 * Accept: application/json * Content-Type: application/json As request body you provide a JSON as below: ```json theme={null} { "file": { "filename": "20190414.csv", "base64_data": "JVBERi0xLjQKJeLjz9MKMSAwIG9iajw8L0NvbnETCETERA..." }, "administration_code": "ADM_2" } ``` Many base64 libraries generate their output with line breaks every 76 characters (due to support for legacy email systems). Line breaks are not valid in JSON strings, so must be removed. If a request is made to place a data file, an import token can be included. An import token is linked to the account belonging to the administration. The token can be sent as a field import\_token in the same way as administration\_code will be sent: ```json theme={null} { "file": { "filename": "20190414.csv", "base64_data": "JVBERi0xLjQKJeLjz9MKMSAwIG9iajw8L0NvbnETCETERA..." }, "administration_code": "ADM_2", "import_token": "4e1243bd22c66e76c2ba9eddc1f91394e57f9f83" } ``` Instead of the `administration_code` an `administration_id` can also be used: ```json theme={null} { "file": { "filename": "20190414.csv", "base64_data": "JVBERi0xLjQKJeLjz9MKMSAwIG9iajw8L0NvbnETCETERA..." }, "administration_id": 1337, "import_token": "4e1243bd22c66e76c2ba9eddc1f91394e57f9f83" } ``` # XML Source: https://docs.paytsoftware.com/imports/xml Submitting the data as XML is preferable to CSV. The XML format allows for strict client side validation and does not require the repetition of data. In the Payt documentation and interface "CSV" is still often used where it should say "CSV/XML/JSON". ### XSD The formal definition describing how the XML must be structured. The xsd itself contains some basic documentation per element. The xsd can be used to build and/or validate xml files before submitting them to Payt. This xsd is also used by Payt during the import to validate the file before extracting the data. If the file is invalid then the validation errors are presented in the Payt interface. The xsd validation is skipped during the import for xml files larger than 50MB, because it would impact import performance too much. Validate large files client side before submitting. [Download xsd](https://backend.paytsoftware.com/xml/xsd) ### Complete example This example contains all available fields at least once. [Download example](https://backend.paytsoftware.com/xml/example_complete) ### Minimal example This example contains only the required fields. [Download example](https://backend.paytsoftware.com/xml/example_minimal) ### Empty example If no invoices are currently outstanding, this is an example of what an empty XML would look like. [Download example](https://backend.paytsoftware.com/xml/example_empty) # Payt Developer Documentation Source: https://docs.paytsoftware.com/index Integrate with Payt: sync invoices and debtors through the REST API, receive real-time webhook events, and bulk-import data. Payt is a receivables management platform. This documentation covers everything you need to integrate with Payt: from syncing invoices and debtors via the REST API to receiving real-time webhook events. Authenticate and make your first API request. Browse all available endpoints. Receive real-time events when data changes in Payt. Bulk-import invoices and debtors via XML, JSON, or CSV. # Accounting software Source: https://docs.paytsoftware.com/integrations/accounting-software The accounting software packages Payt connects with. Payt connects with several accounting software packages so invoice and debtor data flows automatically between your bookkeeping and Payt. Set up the connectors to exchange data between AFAS and Payt. # AFAS Source: https://docs.paytsoftware.com/integrations/afas Set up the connectors in AFAS to exchange data with Payt. To establish a connection between AFAS and Payt, a number of connectors need to be set up in AFAS. This guide explains how to create connectors in AFAS, which fields can be retrieved, and how to test them. The connectors ensure that the information from certain fields in AFAS is passed to specific fields in Payt. ```mermaid theme={null} flowchart LR subgraph AFAS["AFAS"] A["Fieldname\nAFAS"] end subgraph GC["GetConnector"] direction LR GCA["Fieldname\nAFAS"] --> GCP["Fieldname\nPayt"] end subgraph Payt["Payt"] P["Fieldname\nPayt"] end AFAS --> GC --> Payt ``` ## 1. Creating Connectors This chapter covers the steps for creating the necessary connectors in AFAS. ### 1.1. Creating a user account for Payt in AFAS Create a new user in AFAS that will be used solely for the connection with Payt. We call this the connector user. ### 1.2. Creating an AppConnector To establish the connection between AFAS and Payt, an AppConnector for Payt must first be created in AFAS. This AppConnector serves as a container for the group of GetConnectors from Payt. Create this AppConnector in AFAS by navigating to:\ General -> Management -> AppConnector -> New (description e.g. Payt REST API) Select a user group with at least the following access rights (or create a new user group with these access rights): * Access to all administrations (General -> Administration -> Filters -> All administrations) * Access to all dossier items (CRM -> Dossier -> Filters -> CRM - Dossier items -> All dossier items) * Access to all definition filters (General -> Management -> Definition -> Filters -> General - execute definition -> All rights) ### 1.3. Creating a user token (For use in Payt) A user token is also required. Create this token in AFAS by navigating to: * General -> Management -> AppConnector -> Payt REST API -> Maintenance by client -> User tokens Then follow the instructions on this page:\ [Manually add user token to your own app connector](https://help.afas.nl/help/NL/SE/App_Apps_Custom_Tokens_Manual.htm) Be sure to keep the copied token on hand to enter in the onboarding wizard in Payt. If you're unsure where to insert the token in Payt, please contact your Payt implementation specialist. ### 1.4. Creating GetConnectors The GetConnectors needed for the integration can be imported. These GetConnectors will be provided by Payt during implementation. If you use different fields, you can create your own connectors or modify the fields in the imported connector. Import the following required GetConnectors: * `Payt_administrations` * `Payt_payment_conditions` * `Payt_sales_entries_v12` * `Payt_distribution_methods - Extended v2.0 - Tab Digital` * `Payt_sales_invoices_for_cp_ordermanagement_v11` * `Payt_subject_attachments` * `Payt_Verkoopfactuurregels` Import them as follows: * Click General -> Output -> Management -> GetConnector * Right-click in the GetConnectors window * Click Actions -> Import * Select all of the GetConnectors that are mentioned above. For attachments, use the GetConnector `Payt_subject_attachments`.\ Additionally, there's an optional GetConnector `Payt_verstrekking` to retrieve information from the digital tab. See section 4.1. #### Creating your own connector in AFAS If you want to create new connectors, you can do so in AFAS via:\ General -> Output -> Management -> GetConnector -> New ### 1.5. Adding GetConnectors to the AppConnector for use To be able to use the GetConnectors, they must be added to the AppConnector for Payt. Do this in AFAS by going to the AppConnector you added in 1.2 and follow the same steps as in 1.4.\ General -> Management -> AppConnector -> Payt REST API -> GetConnectors -> New ### 1.6. Adding AppConnectorSubject for dossier items To get the PDF files of the invoices into Payt, the standard AFAS connector `AppConnectorSubject` must be added to the AppConnector for Payt. Do this in AFAS via:\ General -> Management -> AppConnector -> Payt REST API -> Connectors -> New -> AppConnectorSubject ## 2. All required AFAS fields The Payt GetConnectors are prefilled with the most commonly used fields in AFAS to populate fields in Payt. If you want to use different AFAS fields to populate Payt and thus configure your own connectors, you can use the fields in this chapter. ### 2.1. GetConnector: `Payt_administrations` The `Payt_administrations` connector should pass the basic data of the administration. These are the following field names: | Field name in Payt | Explanation | Type | | -------------------------------------------- | --------------------------- | ---- | | **administration\_name** *(mandatory)* | Administration name | Text | | **administration\_code** *(mandatory)* | Administration code in AFAS | Text | | **administration\_origin\_id** *(mandatory)* | Administration ID in AFAS | Text | ### 2.2. GetConnector: `Payt_payment_conditions` The `Payt_payment_conditions` connector can transmit the payment terms used in AFAS. On the Payt side this determines which steps are applicable to an invoice. The field names for this connector are: | Field name in Payt | Explanation | Type | | ------------------------------------------------- | ----------------------------- | ---- | | **payment\_condition\_code** *(mandatory)* | Payment condition | Text | | **payment\_condition\_description** *(mandatory)* | Payment condition description | Text | See section 4.2 for more info on payment conditions. ### 2.3. GetConnector: Payt\_subject\_attachments For invoice attachments, use the `Payt_subject_attachments` connector. This is a linking table to match the actual attachment to an invoice via `invoice_dossier_item_extra` from the `Payt_sales_invoices` GetConnector. These are AFAS field names: * `attachment_id` * `subject_id` * `file_id` * `file_name` ### 2.4. GetConnector: `Payt_sales_entries_v12` The `Payt_sales_invoices` GetConnector retrieves sales entries from AFAS. It’s possible other entries need to be retrieved as well, such as journal entries. In that case, use the `Payt_sales_entries` GetConnector. It's important to ensure only entries needed in Payt are passed through this connector. You can apply filters in the GetConnector. All available headers can be found here (always up to date):\ /imports/csv ### 2.5. Note on debtor name/address fields At least one of the following fields must be filled: * `debtor_company_name` * `debtor_firstname` * `debtor_lastname` Sometimes, it’s not possible to distinguish between `debtor_company_name` and `debtor_lastname` because the source system only has one name field. In that case, use `debtor_name`, optionally combined with `debtor_is_company` (value 1 or 0). **NOTE:** If no email address is provided, but the other 4 fields are valid and filled in, no emails will be sent: only letters. ## 3. Check data for accuracy After creating the connectors, you can check the data for accuracy. Navigate to your AFAS REST services endpoint. Replace `CLIENT_UID` with your 5-digit UID (usually present in all usernames): ``` https://CLIENT_UID.AFASonlineconnector.nl/profitrestservices/ ``` or ``` https://CLIENT_UID.rest.afas.online/profitrestservices/ ``` Click **Token Authentication** and enter the token in the following format: ```xml theme={null} 1LONG_TOKEN_FROM_AFAS ``` ## 4. Additional Information ### 4.1. Digital tab If you're using the `digital` tab in AFAS, you can use the optional connector Payt\_verstrekking to retrieve the right information. It first selects based on the sales relationship. Then, if available, the `Work email address` from Projects is used. If unavailable Subscriptions is used as a fallback, with Sales Invoices as a final fallback option. The regular email address is used as `debtor_invoice_email`, and the reminder email as `debtor_reminder_email`. ### 4.2. Payment Conditions If you don't want to use your default payment conditions, for example to separate direct debit invoices, you can use the field `invoice_payment_condition` with the value true/false (check this in the GetConnectors `Payt_sales_entries` and `Payt_sales_invoices`). Payt will then match these payment conditions for you via the implementation specialist or support desk. ## 5. Questions You may still have questions after reading this document. Do you have questions about the expected content in the column "Fieldname Payt"? Then Payt is the right place to ask. The implementation specialist can assist you. Do you have questions about how to set up an AppConnector or GetConnector in AFAS? Please contact your AFAS consultant. # Create administration Source: https://docs.paytsoftware.com/integrations/in-app/create-administration Let users create additional administrations after sign up with their existing access token. Once the sign up has been completed a user might want to create more administrations within Payt. This process is the light version of the sign up process and can be performed by calling the [administration create endpoint](/api-reference/administrations/creates-an-administration) using the `access_token` from the sign up process as authentication. The new administration is added to the same Payt account. The url this administration has in the Payt interface is added to the response, so you can choose to present it to the user as the next step to take in the integration process. ```mermaid theme={null} sequenceDiagram participant U as User participant P as Partner app participant Payt as Payt U->>P: Provide credentials P->>P: Login user U->>P: Initialise the creation of a Payt administration P->>Payt: Send a create_administration request Payt->>Payt: Create administration Payt->>Payt: Setup auto-connect if api credentials are provided Payt->>Payt: Extend access_token permissions to include the new administration Payt->>P: Return administration P->>U: Receive feedback P->>P: Associate the current administration with the created Payt administration Payt->>Payt: Start the first import if api credentials were provided ``` # In-app integration Source: https://docs.paytsoftware.com/integrations/in-app/overview Integrate your app with Payt so users can create and connect a Payt account without leaving your product. In order to integrate your app with Payt, a one-time initial setup is required. After this, users can create a Payt account from within your app and have this account automatically connected for data exchange in both directions. ## Initial setup ### Create application First thing to do is to register your app within Payt. Take a look in the documentation on how to [create an application](/authentication/applications). There are two things you should enable to make full use of the processes as described below: * subscribe to the `company_updated` webhook event to get notified once the user confirms their Payt account; * enable the `administrations:write` scope to be able to create new administrations after the sign up is completed. ### Auto-connect For a full in-app integration it is possible to have every newly created Payt account to be connected with the corresponding account in your app. This can be done by submitting the required authentication keys or tokens during the sign up process. This does not work out-of-the-box. After your app has been registered you have to contact Payt to have this auto-connect option enabled. A few settings need changing and, in some cases, some programming is required to make the auto-connect work. Once this setup is completed, your users will have a better integration experience since your app and Payt will be automatically connected. You should inform your users about the access Payt will be granted to their data before sending the sign up request. We will provide you with an account on [https://demo.paytsoftware.com](https://demo.paytsoftware.com) to be able to fully test the sign up process. Let users create a Payt account from within your app. Add more administrations to an existing account. # Sign up Source: https://docs.paytsoftware.com/integrations/in-app/sign-up Let users create a Payt account from within your app via the sign_up endpoint. Once the initial setup is completed your users should be able to start the sign up process from within your app. A request can be made to the [sign\_up endpoint](/api-reference/sign_up/sign-up-a-new-payt-account) containing user and administration details. When the sign up request is valid, all objects will be created just as if the user went through a regular Payt sign up process. In addition a connection to your application will be set up if auto-connect has been enabled and the required connection credentials are provided in the request payload. Finally the new account will be connected to your Payt application, webhooks are activated and an `authorization_code` will be returned with which the first `access_token` can be created. This request must be completed before the `authorization_code` expires, which is after 10 minutes. The `access_token` is required if you want to query the created account through the API. You can also use it to query invoices and debtors from the API if the API module is enabled for the administration or if it has been enabled for your app. Your users can now create a Payt account without leaving your app. They will receive an email from Payt with a link that brings them to a page where they can set their password and agree with the Payt terms and conditions. After this, they are logged in and can finalize setting up their account. The activation link the user receives in the email is also returned from the sign up endpoint so you can choose to present it to the user as the next step to take in the integration process. If users do not confirm their Payt account we will send them a reminder via email. If, after 30 days, still no action has been taken then the account will automatically be deleted. Users can always, at a later moment, restart the sign up process. ```mermaid theme={null} sequenceDiagram participant U as User participant P as Partner app participant Payt as Payt U->>P: Provide credentials P->>P: Login user U->>P: Initialise the creation of a Payt account P->>Payt: Send a sign_up request Payt->>Payt: Create account: Company with user and administration Payt->>Payt: Setup auto-connect if api credentials are provided Payt->>P: Return created account including an authorization_code P->>U: Receive feedback P->>P: Associate the current administration with the created Payt administration P->>Payt: Request the first access_token using the authorization_code Payt->>Payt: Create access_token Payt->>P: Save access_token Payt->>U: Send welcome email with "set your password" url U->>U: Click link in the email U->>Payt: Choose password and agree to Payt terms and conditions Payt->>Payt: Login user Payt->>Payt: Confirm account and send webhook if configured Payt->>P: Receive webhook event: company_updated Payt->>Payt: Start the first import if api credentials were provided ``` # Integrations Source: https://docs.paytsoftware.com/integrations/overview Connect Payt with your accounting software or embed Payt account creation inside your own app. Payt integrates with external systems in two main ways: connectors to accounting software packages, and an in-app integration that lets your users create and connect a Payt account without leaving your product. Connect Payt with packages like AFAS. Embed Payt sign up and account creation in your own app. # Administration Source: https://docs.paytsoftware.com/models/administration Administration model: statuses, pause behavior, and what each state means. An administration represents a single entity (company, organization, or department) that manages invoices and debtors in Payt. ## Statuses | Status | Description | | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | implementation | The administration has been created, but has not been activated yet. | | active | The administration is activated by completing the implementation checklist. Once an administration has been activated the communication with debtors is enabled. This is the normal state of the administration. | | deactivated | The administration can be deactivated, which stops all automated processes, but does allow communication with individual debtors. | | deleted | The administration has been marked for deletion and will be permanently deleted from the database after 30 days. The administration does not appear to exist anymore, within the API it can only be found through the [administrations](/api-reference/administrations/get-administrations) endpoint. | ## Pause An administration can be paused. This is a temporary state in which automated communications to debtors are halted until the administration is resumed. The administration can be fully paused or only the reminders can be paused, in which case new invoices will still be sent to debtors. The administration status remains `active` while it is paused and costs will continue to be billed. # Company Source: https://docs.paytsoftware.com/models/company Company model: statuses, trial behavior, and what each state means. A company is the top-level entity in Payt. It contains one or more administrations and holds the billing plan and user accounts. ## Statuses | Status | Description | | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | unconfirmed | The company has been created but the user who initialized the creation has not yet accepted the Payt terms and conditions. The user cannot login until the company is confirmed. If the company remains unconfirmed for 30 days it will automatically be deleted. | | implementation | The company has been confirmed, but no administration of the company has been activated yet. | | active | The company is activated once its first administration has been activated. This is the normal state of the company. | | deactivated | The company can be deactivated for a variety of reasons, such as: trial expired, contract expired, unpaid bills, misuse of the application, potential security risk and others. Users can only access a limited part of the application to find the cause of the deactivation and, in some cases, revert the deactivation. All underlying administrations are deactivated and no communication with debtors is possible at this point. | | deleted | The company has been marked for deletion and will be permanently deleted from the database after 30 days. The company and its administrations do not appear to exist anymore, within the API they can only be found through the [companies](/api-reference/companies/get-companies-connected-to-your-application) and [administrations](/api-reference/administrations/get-administrations) endpoints. | ## Trial Every new company starts in a trial state. As long as the company is in trial no costs are billed. Some features are disabled or limited in their usage. If the company wants to make use of one of these disabled features or surpass a limit, then a billing plan must be chosen, which automatically ends the trial period. The trial ends 30 days after the company has been activated. This means that the `unconfirmed` and `implementation` statuses do not count towards the trial period. After 30 days of trial the company will automatically be switched to the `inactive` status and can only be returned to `active` by choosing a billing plan. # File Source: https://docs.paytsoftware.com/models/file Upload files via checksums and presigned upload URLs before attaching them to invoices. ## Flow of uploading files For uploading files you send a list of files to upload: ```json theme={null} { "files": [ { "byte_size": "12345", "checksum": "JVBERi0xLjQKJeLjz9MKMSAwIG9iajw8L0NvbnETCETERA...", "content_type": "application/pdf" } ], "administration_id": "1" } ``` Payt will return a list of files that need uploading. **Files that are already present are not returned.** ```json theme={null} [ { "checksum": "JVBERi0xLjQKJeLjz9MKMSAwIG9iajw8L0NvbnETCETERA...", "expires_at": "timestamp_4_hours_from_now", "url": "https://url_to_upload_file.paytsoftware.com" } ] ``` After that, you can upload the file to the presented URL. There the file will be checked if it matches on byte\_size, content\_type and checksum. ```shell theme={null} curl --request PUT \ --url http://localhost:3000/file_storage/disk/eyJfcmFpbHMiOnsiZGF0YSI6eyJjaGVja3N1bSI6IkRyL0xQVTdUUVZLNHB3Lzh3WEs4cEV2VzBjL3BDSkh0Qi9CYldLMENzZmIydkJQN21EQjFZajBSTjg2STNvcUZBT0tlOGJTdGsxcTJ5b0poYlpJRjBRPT0iLCJjb250ZW50X3R5cGUiOiJhcHBsaWNhdGlvbi9wZGYiLCJjb250ZW50X2xlbmd0aCI6NDM2MTZ9LCJleHAiOiIyMDI0LTA5LTE3VDEyOjA0OjI4LjU2MloiLCJwdXIiOiJibG9iX3Rva2VuIn19--75d0d86602ca4f7dbe7126d4c46c6c8fce898b69 \ --header 'Content-Type: application/pdf' \ --data 'JVBERi0xLjQKJeLjz9MKMSAwIG9iaiAKPDwKL00gKEQ6MjAxMjAzMjcxMD...=' ``` ## Checking file integrity Payt uses checksum values to verify the integrity of data that you upload. Payt uses the Secure Hash Algorithm 3 with 512 bits ([SHA3-512](https://en.wikipedia.org/wiki/SHA-3)). This is encoded with [Base64](https://en.wikipedia.org/wiki/Base64) encoding. This results in a string with 88 characters, the length of this checksum will be validated. ## Fields | Field name | Description | | ----------------- | ------------------------------------------------------------------------------------------------------------- | | **checksum** | Checksum of file with SHA3-512 hashing and Base64 encoding | | **byte\_size** | Size of file in bytes | | **content\_type** | [Mime type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types) of file | # Invoice Source: https://docs.paytsoftware.com/models/invoice Recommended flow for creating invoices, and how files, payments, and sent_at behave. ## Creating invoices Create contacts on [postV1Contacts](/api-reference/contacts/create-or-update-administration-contacts). Create debtors on [postV1Debtors](/api-reference/debtors/create-or-update-administration-debtors). Upload invoice documents before creating invoices. See [file](/models/file) for details. * To unassign a file, provide `destroy: true` on the file parameter. * If `destroy: true` is combined with `checksum`, only the file matching that checksum is removed. Create invoices on [postV1Invoices](/api-reference/invoices/upsert-invoices-in-bulk). **Payments** If payments are provided, all payments for the invoice must be included and ordered chronologically (oldest first). If `open_amount` changes but no payments are provided, Payt creates a payment matching the change in amount. **Sent at** The `sent_at` field sets the date when the invoice was sent to the debtor. If not provided, Payt sends the invoice to the debtor. This field can only be set if the invoice has not yet been published to the debtor. # Notification Source: https://docs.paytsoftware.com/models/notification Notification types and what triggers them. ## Notification types ### General | Notification type | Description | | ---------------------------------------------------- | -------------------------------------------------------------------------- | | added\_to\_payment\_plan | Added to a payment plan | | administration\_costs\_no\_longer\_applicable | The administration costs are no longer applicable | | administration\_costs\_reapplied | The administration costs have been re-applied | | credit\_case\_closed | Debt collection case (credit case) closed | | credit\_case\_paid | Debt collection case (credit case) paid in full | | credit\_case\_paused | Debt collection case (credit case) paused | | credit\_case\_resumed | Debt collection case (credit case) resumed | | debtor\_created | Debtor created | | debtor\_ignored | Debtor is on the list of 'ignored debtors' | | debtor\_no\_longer\_reminding\_paused | Sending reminders to this debtor has been resumed | | debtor\_paused | Debtor paused | | debtor\_reminding\_paused | Reminders to debtor paused | | debtor\_resumed | Debtor resumed | | debtor\_unignored | Debtor is removed from the list of 'ignored debtors' | | direct\_debit\_action | Waiting for direct debit payment | | document\_attached | Invoice resumed after adding invoice document | | document\_missing | Invoice document missing | | forwarded\_to\_bailiff | Forwarded to bailiff | | invoice\_action | Invoice paused | | invoice\_added\_to\_credit\_case | Invoice added to a debt collection case (credit case) | | invoice\_document\_added | Invoice document added | | invoice\_document\_changed | Invoice document changed | | invoice\_document\_destroyed | Invoice document deleted | | invoice\_email\_resent | Email for a step was resent | | invoice\_ignored | Invoice is on the list of 'ignored invoices' | | invoice\_letter\_resent | Letter for a step was resent | | invoice\_merged | Invoice has been merged with another invoice | | invoice\_open\_amount\_higher\_than\_invoice\_amount | The outstanding amount is higher than the invoice amount | | invoice\_overpaid | Too much has been booked on this invoice | | invoice\_paid\_and\_invoice\_date\_too\_long\_ago | The invoice date is more than a month ago, the invoice has not been sent | | invoice\_reopened\_after\_long\_time | Invoice has been reopened after more than 6 months | | invoice\_resumed | Invoice resumed | | invoice\_step\_could\_not\_be\_performed | Step could not be performed | | invoice\_step\_rescheduled | Step rescheduled | | invoice\_step\_skipped | Step skipped | | invoice\_unignored | Invoice is removed from the list of 'ignored invoices' | | letter\_returned | This letter could not be delivered | | mail\_bounced | This email could not be delivered | | minimum\_amount\_open\_reached | The outstanding amount is lower than the configured minimum amount | | needs\_call\_to\_debtor | Invoice paused, debtor needs to be called | | outstanding\_items\_overview\_sent | Sent outstanding items overview | | paused\_by\_import | Invoice paused during import | | paused\_by\_user | Invoice paused | | payment\_pending | The accounting software recognised a possible payment for this invoice | | payment\_condition\_ignored | Payment condition is on the list of 'ignored payment conditions' | | payment\_condition\_unignored | Payment condition is removed from the list of 'ignored payment conditions' | | payment\_plan\_active | Payment plan active | | payment\_plan\_approved | Payment plan approved | | payment\_plan\_created | Payment plan created | | payment\_plan\_deactivated | Payment plan deactivated | | payment\_plan\_destroyed | Payment plan deleted | | payment\_plan\_proposal | Payment plan requested | | payment\_plan\_rejected | Payment plan rejected | | payment\_plan\_updated | Payment plan changed | | psp\_mandate\_created | Direct debit authorisation given | | psp\_mandate\_revoked | Direct debit authorisation revoked | | psp\_transaction | Paused because of online payment | | psp\_transaction\_refunded | Resumed because of online payment refund | | psp\_transaction\_reversal | Resumed because of direct debit reversal | | trial\_letter\_limit\_reached | Letter not sent due to limit trial period | ### Creditworthiness | Notification type | Description | | ------------------------------------------- | ----------------------------------------------------------------------------------------- | | debtor\_creditworthy\_to\_uncertain | The creditworthiness of this debtor is lowered to uncertain | | debtor\_creditworthy\_to\_not\_creditworthy | The creditworthiness of this debtor is lowered to not creditworthy | | debtor\_uncertain\_to\_creditworthy | The creditworthiness of this debtor has improved to creditworthy | | debtor\_uncertain\_to\_not\_creditworthy | The creditworthiness of this debtor is lowered further from uncertain to not creditworthy | | debtor\_not\_creditworthy\_to\_uncertain | The creditworthiness of this debtor has improved to uncertain | | debtor\_not\_creditworthy\_to\_creditworthy | The creditworthiness of this debtor has improved to creditworthy | | debtor\_bankruptcy | This debtor is in a state of bankruptcy | | debtor\_no\_bankruptcy | This debtor is no longer in a state of bankruptcy | | debtor\_debt\_restructuring | This debtor started debt restructuring | | debtor\_no\_debt\_restructuring | This debtor finished debt restructuring | | debtor\_suspension\_of\_payments | This debtor has a suspension of payments | | debtor\_no\_suspension\_of\_payments | This debtor no longer has a suspension of payments | ### Debt collection (Creditreform) | Notification type | Description | | -------------------------------------------------------------------------- | ------------------------------------------------------ | | debt\_collection\_address\_search\_failed | Search for new address details unsuccessful | | debt\_collection\_application\_for\_seizure | Application for seizure | | debt\_collection\_application\_for\_seizure\_failed | Seizure application rejected | | debt\_collection\_application\_for\_writ | Application for writ | | debt\_collection\_application\_for\_writ\_failed | Erroneous writ application | | debt\_collection\_approval\_start\_court\_proceedings | Creditor agrees to initiate court proceedings | | debt\_collection\_arrest\_warrant\_available | Arrest warrant available | | debt\_collection\_bankruptcy | Bankruptcy | | debt\_collection\_bankruptcy\_or\_debt\_restructuring | Bankruptcy or debt restructuring | | debt\_collection\_bankruptcy\_requested | Bankruptcy filed | | debt\_collection\_bankruptcy\_started | Bankruptcy initiated | | debt\_collection\_close\_dossier\_general | General advice for closing dossier | | debt\_collection\_coercive\_measures\_against\_debtor | Coercive measures against customer | | debt\_collection\_combined\_request\_baliff | Combined application for bailiff | | debt\_collection\_correspondence\_with\_bailiff | Correspondence with bailiff | | debt\_collection\_correspondence\_with\_creditor | Correspondence with creditor | | debt\_collection\_correspondence\_with\_debtor | Correspondence with customer | | debt\_collection\_correspondence\_with\_debtor\_from\_creditreform | Correspondence with customer from Creditreform | | debt\_collection\_correspondence\_with\_debtor\_lawyer | Correspondence with customer attorney | | debt\_collection\_correspondence\_with\_debtor\_representative | Correspondence with customer representative | | debt\_collection\_correspondence\_with\_government\_institution | Correspondence with (government) agency | | debt\_collection\_correspondence\_with\_lawyer | Correspondence with lawyer | | debt\_collection\_debtor\_called | Customer called | | debt\_collection\_debtor\_called\_negative | Customer called, negative | | debt\_collection\_debtor\_in\_multiple\_dossiers | Customer in several dossiers | | debt\_collection\_debtor\_moved\_to\_unknown\_address | Customer moved to unknown address | | debt\_collection\_debtor\_not\_reachable\_by\_phone | Customer not reachable by phone | | debt\_collection\_defense\_against\_seizure | Defence against seizure | | debt\_collection\_defense\_against\_writ | Customer defence against writ | | debt\_collection\_defense\_debtor | Defence of customer | | debt\_collection\_deferral\_of\_payment | Postponement of payment | | debt\_collection\_dossier\_closed | Dossier closed | | debt\_collection\_dossier\_created | Dossier created | | debt\_collection\_dossier\_on\_hold | Dossier paused because of customer | | debt\_collection\_error\_in\_application\_for\_seizure | Erroneous seizure application | | debt\_collection\_finished | End of collection process | | debt\_collection\_first\_reminder\_residual\_sent | First reminder of residual claim sent | | debt\_collection\_first\_reminder\_sent | First reminder sent | | debt\_collection\_full\_payment\_received | Fully paid | | debt\_collection\_international\_dossier\_closed | International case closed | | debt\_collection\_international\_dossier\_in\_progress | International case in progress | | debt\_collection\_legal\_collection\_started | Legal collection phase started | | debt\_collection\_partial\_claim\_added | Partial claim added | | debt\_collection\_partial\_payment\_received | Partial payment received | | debt\_collection\_payment\_of\_settlement | Payment of settlement amount | | debt\_collection\_payment\_plan | Payment plan started | | debt\_collection\_payment\_plan\_cancelled | Payment plan stopped | | debt\_collection\_procedure\_changed\_basis | Procedure change to basic reminder | | debt\_collection\_procedure\_changed\_negative | Procedure change to wait and see, customer negative | | debt\_collection\_reminder\_deferral\_of\_payment | Reminder deferral of payment | | debt\_collection\_reminder\_for\_information\_at\_inheritance\_court | Reminder to inheritance court | | debt\_collection\_reminder\_for\_power\_of\_attorney | Reminder power of attorney creditor | | debt\_collection\_reminder\_for\_response\_or\_documents\_from\_creditor | Reminder to creditor for response or documents | | debt\_collection\_reminder\_for\_response\_or\_documents\_from\_debtor | Reminder customer for response or documents | | debt\_collection\_reminder\_for\_status\_update | Reminder request state of affairs | | debt\_collection\_reminder\_payment\_plan\_sent | Reminder payment plan | | debt\_collection\_reminder\_sent | Reminder sent | | debt\_collection\_reminder\_sent\_to\_heirs | Reminder sent to heirs of | | debt\_collection\_request\_approval\_for\_legal\_collection | Request approval legal collection phase from creditor | | debt\_collection\_request\_bailiff | Bailiff application | | debt\_collection\_request\_coercion\_from\_bailiff | Application for coercion to bailiff | | debt\_collection\_request\_for\_documents\_from\_creditor | Request documents from creditor | | debt\_collection\_request\_for\_documents\_from\_debtor | Request documents from customer | | debt\_collection\_request\_for\_documents\_from\_government\_institution | Request documents from (government) agency | | debt\_collection\_request\_for\_information\_at\_inheritance\_court | Application to inheritance court | | debt\_collection\_request\_for\_information\_at\_penitentiary\_institution | Application to penitentiary institution | | debt\_collection\_request\_for\_invoice | Invoice lawyer requested/expected | | debt\_collection\_request\_for\_new\_address | Address information requested from municipality | | debt\_collection\_request\_for\_power\_of\_attorney | Request power of attorney for collection with creditor | | debt\_collection\_request\_for\_response\_from\_creditor | Request creditor for response | | debt\_collection\_request\_for\_response\_from\_debtor | Request customer for response | | debt\_collection\_request\_for\_status\_update | Request state of affairs | | debt\_collection\_request\_legal\_proceedings | Request for judicial procedure lawyer | | debt\_collection\_research | Investigation | | debt\_collection\_research\_at\_municipality | Inquiry at municipality | | debt\_collection\_second\_reminder\_payment\_plan | Second reminder payment plan | | debt\_collection\_second\_reminder\_residual\_sent | Second reminder of residual claim sent | | debt\_collection\_second\_reminder\_sent | Second reminder sent | | debt\_collection\_seizure\_delivered | Seizure delivered | | debt\_collection\_seizure\_sent | Seizure sent | | debt\_collection\_settlement\_agreement | Settlement agreement | | debt\_collection\_special\_measures | Special measures | | debt\_collection\_writ\_delivered | Writ delivered | | debt\_collection\_writ\_delivery\_failed | Writ could not be delivered | | debt\_collection\_writ\_sent | Writ sent | # Models Source: https://docs.paytsoftware.com/models/overview Explanation of API properties that need more context than the endpoint reference provides. This chapter describes the properties exposed by the API that require some more explanation, such as statuses and their meaning. For a full list of all exposed properties, see the [API Reference](/api-reference/administrations/get-administrations). # What is Payt? Source: https://docs.paytsoftware.com/product/what-is-payt Payt is an accounts receivable management platform that automates invoice follow-up and payment collection. Payt is an accounts receivable management platform. It syncs invoices and debtor data from your accounting or ERP system, then handles the collections workflow: sending reminders, managing payment plans, escalating overdue invoices, and registering payments **while maintaining personal contact with your customer.** ## Core functionality * Automated payment reminders with configurable schedules * Flexible payment plans negotiated between debtor and creditor * Internal notes and task lists for team collaboration on accounts * Creditworthiness checks and electronic invoicing * Self-service invoice portal for debtors * Payment reconciliation For a full overview of Payt's features, see [paytsoftware.com/features](https://paytsoftware.com/features/). ## Scale Payt serves 50+ industries, from organizations processing fewer than 30 invoices per month to over 1,000,000. It integrates with SAP, Oracle NetSuite, Xero, and other accounting and ERP platforms. ## What you can build See the [API overview](/api/overview) for how to sync invoices and debtors, and [webhooks](/webhooks/overview) for receiving real-time events when data changes in Payt. # IP addresses Source: https://docs.paytsoftware.com/reference/ip-addresses The fixed IP addresses Payt uses for outbound communication, so you can allowlist them in firewalls. When Payt initiates a connection to your systems (webhook deliveries and other outbound traffic), requests originate from a fixed set of IP addresses. If your firewall restricts inbound traffic, allowlist these addresses. ## Outbound IP addresses These IP addresses are subject to change. Avoid hard-coding them in your application. Reference this page instead, and where possible allowlist by hostname rather than by fixed IP. | IP address | Used for | | ---------------- | ---------------------------------------- | | `52.212.22.216` | General outbound communication | | `52.212.138.143` | General outbound communication | | `34.249.128.162` | [Webhook](/webhooks/overview) deliveries | This page is the single source for Payt's IP addresses. Other pages link here rather than repeating the values. # Activation Source: https://docs.paytsoftware.com/webhooks/activation How to activate webhooks for an administration in Payt. Webhooks can be activated at the administration level in Payt. To do this, go to the `Dashboard` of the administration > `Administration settings` > `Modules`. Then you can set up the webhooks under the `Webhooks` tab. It is possible to activate all webhooks at once or determine per webhook if you want to use it. # Changelog Source: https://docs.paytsoftware.com/webhooks/changelog History of changes to webhook events and payloads. | Date | Change | | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 2026-06-18 | Emphasize that webhook event processing should be idempotent. | | 2026-06-18 | Remove `psp_transaction` from example response for webhook event `psp_transaction_refunded` to reflect the current response. | | 2026-01-05 | Added `todo_list_item_deleted` to [webhook events](/webhooks/events) | | 2026-01-05 | Added `todo_list_item_updated` to [webhook events](/webhooks/events) | | 2026-01-05 | Added `todo_list_item_created` to [webhook events](/webhooks/events) | | 2025-12-02 | Added `email_bounced` to [webhook events](/webhooks/events) | | 2025-11-20 | Added `incoming_ubl_received` to [webhook events](/webhooks/events) | | 2025-05-26 | Added `bundled_reminder_invoice_performed` to [webhook events](/webhooks/events) | | 2025-04-16 | Add `revoked_psp_mandates` to `debtor` | | 2025-04-07 | Added `Contact` details to `Debtor` | | 2025-03-18 | Added `psp_transaction_refunded` to [webhook events](/webhooks/events) | | 2025-03-18 | Added `refunded_amount` to psp\_transaction object | | 2025-03-14 | Updated `invoice_payment_created` and removed `case_payment_created` | | 2025-03-03 | Added `payment_method` to psp\_transaction object | | 2025-02-25 | Added `bank_account_number`, `bank_account_name` to psp\_mandate object | | 2025-02-21 | Add autogenerated credit limit amount to debtor example payloads | | 2025-01-28 | Add documentation about mutual TLS | | 2024-12-02 | Added email, sms, ubl and letter sending failures to [webhook events](/webhooks/events) | | 2024-11-28 | Added `bank_account_name`, `bank_account_number` fields to psp transaction object | | 2024-08-06 | Added `reversal_code` field to psp transaction object | | 2024-06-28 | Added `amount`, `currency_code` fields to psp transaction object | | 2024-05-13 | Add `invoice_paused`, `invoice_blocked`, `invoice_resumed` and `debtor_email_address_provided` events | | 2023-06-22 | Added `case_paid`, `case_invoice_amount_paid` and `case_reopened` events | | 2023-05-16 | Add `psp_mandate_created` & `psp_mandate_revoked` events | | 2022-07-21 | Extend attributes `invoice` objects nested in `credit_cases` | | 2022-07-21 | Added `invoices` and `credit_cases` to the resource in all `payment_plan_term` events | | 2022-07-21 | Added `debtor` and `administration` to the resource in all events | | 2022-07-21 | Added `order_number` and `purchase_order_number` to nested invoice entries | | 2022-07-07 | Added `category` and `payment_condition` to nested invoice entries | | 2022-07-07 | Added `invoice_payment_created` event, total/open\_administration\_costs to invoice, `open_interest_and_collection_costs` to credit case and `administration_costs` to payments | | 2022-06-29 | Added `category` field to invoices and debtor objects and added `payment_condition` field to invoice object | | 2022-06-27 | Added `case_payment_created` | | 2022-01-28 | Added `payment_plan_updated` | | 2021-10-11 | Added `interest`, `debt_collection_costs` and `currency_code` fields to credit case object | | 2021-10-04 | Added invoice numbers, credit case numbers and payment plan terms | | 2021-08-26 | Added `X-PAYT-ADMINISTRATION-IDENTIFIER` | | 2021-06-21 | Added `case_to_bailiff`, `case_created` and `payment_plan_term_expired` events | | 2021-05-17 | Added `payment_plan_deactivated` | | 2021-01-27 | Added label events and added `ubl_document_url` fields to invoice object | | 2020-12-04 | Added creditworthiness events | | 2020-06-17 | Added `document_url` field to invoice object | | 2020-03-02 | Removed `company_code` and added `origin_id` to administration object. | | 2020-02-20 | Added microseconds to event\_times | | 2019-10-21 | Added fields to invoice object: `amount_total`, `amount_open`, `book_amount_total`, `book_amount_open`, `currency_code` and `book_currency_code` | | 2019-04-12 | Added `case_step_performed` | | 2018-07-03 | Added `bundled_reminder_sent` | | 2018-06-08 | Updated `payment_plan_created` event so it now contains the corresponding invoices and/or credit cases. - Invoice objects no longer contain a nested debtor object. | # Events Source: https://docs.paytsoftware.com/webhooks/events All webhook event types Payt can send, with example payloads. ## Event types ### General event types | Event type | Description | | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | | [bundled\_reminder\_email\_bounced](#bundled_reminder_email_bounced) | Sending a bundled reminder via email failed | | [bundled\_reminder\_letter\_returned](#bundled_reminder_letter_returned) | Sending a bundled reminder via postal service failed | | [bundled\_reminder\_sent](#bundled_reminder_sent) | Bundled reminder sent | | [bundled\_reminder\_invoice\_performed](#bundled_reminder_invoice_performed) | An invoice is mentioned in a bundled reminder | | [case\_created](#case_created) | A debt collection case is created | | [case\_email\_bounced](#case_email_bounced) | Sending a debt collection case via email failed | | [case\_invoice\_amount\_paid](#case_invoice_amount_paid) | All invoices in a debt collection case were paid, but not the collection costs or interest | | [case\_letter\_returned](#case_letter_returned) | Sending a debt collection case via postal service failed | | [case\_new\_comment](#case_new_comment) | A new reaction on a case | | [case\_paid](#case_paid) | A debt collection case was fully paid | | [case\_reopened](#case_reopened) | Debt collection case is no longer closed | | [case\_step\_performed](#case_step_performed) | A case step is performed for the case | | [case\_to\_bailiff](#case_to_bailiff) | Case is forwarded to bailiff | | [credit\_limit\_exceeded](#credit_limit_exceeded) | Credit limit exceeded | | [debtor\_new\_comment](#debtor_new_comment) | A new reaction on a debtor | | [debtor\_email\_address\_provided](#debtor_email_address_provided) | An email address was provided for the debtor | | [debtor\_email\_address\_removed](#debtor_email_address_removed) | An email address was removed for the debtor | | [email\_bounced](#email_bounced) | An email sent to a debtor bounced, can be any type of bounce | | [invoice\_blocked](#invoice_blocked) | Invoice flow is blocked for some reason | | [invoice\_call\_reminder\_performed](#invoice_call_reminder_performed) | Invoice call reminder performed | | [invoice\_closed](#invoice_closed) | Invoice is both sent and paid | | [invoice\_created](#invoice_created) | Invoice created | | [invoice\_email\_bounced](#invoice_email_bounced) | Sending an invoice via email failed | | [invoice\_letter\_returned](#invoice_letter_returned) | Sending an invoice via postal service failed | | [invoice\_new\_comment](#invoice_new_comment) | A new reaction on an invoice | | [invoice\_paid](#invoice_paid) | Invoice is fully paid | | [invoice\_paused](#invoice_paused) | Invoice flow is paused by the user | | [invoice\_payment\_created](#invoice_payment_created) | A new payment was registered for the invoice | | [invoice\_reopened](#invoice_reopened) | Invoice is no longer paid | | [invoice\_resumed](#invoice_resumed) | Invoice flow is resumed | | [invoice\_sms\_failed](#invoice_sms_failed) | Sending an invoice using SMS failed | | [invoice\_step\_performed](#invoice_step_performed) | An invoice step is performed for the invoice | | [invoice\_to\_debt\_collection](#invoice_to_debt_collection) | Invoice is marked ready for debt collection | | [invoice\_ubl\_failed](#invoice_ubl_failed) | Sending an invoice using UBL failed | | [incoming\_ubl\_received](#incoming_ubl_received) | Incoming invoice UBL received | | [label\_added](#label_added) | Label added to debtor, invoice, or debt collection case | | [label\_removed](#label_removed) | Label removed from debtor, invoice, or debt collection case | | [payment\_plan\_created](#payment_plan_created) | Payment plan is created | | [payment\_plan\_deactivated](#payment_plan_created) | Payment plan is deactivated | | [payment\_plan\_finished](#payment_plan_created) | Payment plan is finished | | [payment\_plan\_term\_expired](#payment_plan_term_expired) | Term of payment plan is expired | | [payment\_plan\_updated](#payment_plan_created) | Payment plan is updated | | [psp\_mandate\_created](#psp_mandate_created) | Psp mandate is signed/created | | [psp\_mandate\_revoked](#psp_mandate_revoked) | Psp mandate is revoked | | [psp\_transaction\_charged\_back](#psp_transaction_charged_back) | Psp transaction received a chargeback | | [psp\_transaction\_successful](#psp_transaction_successful) | New psp transaction registered | | [psp\_transaction\_refunded](#psp_transaction_refunded) | Psp transaction is (partially) refunded | | [todo\_list\_item\_created](#todo_list_item_created) | Task was created | | [todo\_list\_item\_updated](#todo_list_item_updated) | Task was updated | | [todo\_list\_item\_deleted](#todo_list_item_deleted) | Task was deleted | ### Creditworthiness This event type is only available when creditworthiness monitoring is enabled for an administration. | Event type | Description | | ------------------------------------------------------ | ------------------------------------ | | [creditworthiness\_changed](#creditworthiness_changed) | Creditworthiness information changed | In addition a creditworthiness profile is added to the debtor containing the most recent creditworthiness information. When monitoring an autogenerated credit limit is enabled for an administration, the `autogenerated_credit_limit_amount` field is added to the debtor data. ## Special events ### case\_step\_performed The `case_step_performed` event can have different "name" values: * summons * summons\_reminder * second\_summons * second\_summons\_reminder * notice\_of\_default * prejudiciary ### invoice\_payment\_created Every time the amount that the debtor needs to pay for an invoice changes this event is triggered. The event contains details about the amount, currency, date, etc. #### amount The value of the payment in `currency`. This is the amount as the debtor will see it. #### book\_amount The value of the payment in `book_currency`. Use this amount when synchronizing with accounting software. A negative value indicates a debit transaction, a positive value indicates a credit transaction. #### book\_currency This is the currency that belongs to the `book_amount` value. It is the currency in which the administration does its bookkeeping. #### cost\_type Payt makes a distinction between payments for the original amount of the invoice and for payments of additional costs added by Payt. When (part of) the total\_amount of the invoice is paid the `cost_type` will be "principal". Payments with this type are created when Payt imports data from the accounting software. The sum of all "principal" payments is equal to the difference between the `total_amount` and `open_amount` of the invoice. When costs are added to an invoice then payments will be added that have "costs" as a suffix. Payt currently supports 3 types of costs: "administration\_costs", "interest\_costs" and "debt\_collection\_costs". #### currency This is the currency that belongs to the `amount` value. It is the currency of the invoice. ### invoice\_step\_performed The `invoice_step_performed` event can have different "name" values: * reminder\_1 * reminder\_2 * reminder\_3 * reminder\_4 * storno\_reminder * final\_reminder * invoice\_pause * pre\_reminder * start\_debt\_collection * credit\_note\_send * invoice\_send * zero\_amount\_invoice\_send * direct\_debit\_invoice\_send * debtor\_call * forward\_to\_external\_party ## Examples ## invoice\_created ```json theme={null} { "event": { "event_name": "invoice_created", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "due_date": "2018-04-29", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## invoice\_paid ```json theme={null} { "event": { "event_name": "invoice_paid", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "due_date": "2018-04-29", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [ { "id": 1, "created_at": "2018-06-05T09:48:54.314159Z", "paid_at": "2018-06-05T09:48:54.314159Z", "remote_payment_identifier": "rpi_wlkj234452jkwlasdo3534adf", "bank_account_name": "Bosch-Brink", "bank_account_number": "NL19ABNM0123456789", "payment_method": "ideal", "amount": "337.0", "currency_code": "EUR", "reversal_code": null } ], "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## invoice\_paused See [`invoice_created`](#invoice_created) ## invoice\_blocked See [`invoice_created`](#invoice_created) ## invoice\_resumed See [`invoice_created`](#invoice_created) ## invoice\_payment\_created ```json theme={null} { "event": { "event_name": "invoice_payment_created", "context": { "id": 3592191, "amount": "2.0", "book_amount": "2.0", "cost_type": "administration_costs", "currency_code": "EUR", "description": null, "payment_date": "2018-04-15", "payment_method": "bank_transfer", "reason": null, "reversal_code": null, "transaction_type": null, "invoice": { "id": 1, "invoice_number": "2011-1", "invoice_date": "2018-03-30", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "due_date": "2018-04-29", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "labels": [ { "name": "Risico" } ] }, "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transaction": { "id": 2, "paid_at": "2023-09-25T13:59:49.916Z", "created_at": "2023-09-25T13:59:49.917Z", "remote_payment_identifier": "id_1", "bank_account_name": "Bosch-Brink", "bank_account_number": "NL19ABNM0123456789", "payment_method": "ideal", "amount": "2.0", "refunded_amount": "0.00", "currency_code": "EUR", "reversal_code": null }, "resource_type": "payment" }, "event_time": "2022-06-27T06:19:07.642246Z" } } ``` ## invoice\_closed ```json theme={null} { "event": { "event_name": "invoice_closed", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "due_date": "2018-04-29", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## invoice\_reopened ```json theme={null} { "event": { "event_name": "invoice_reopened", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "amount_total": "1337", "amount_open": "500", "book_amount_total": "1337", "book_amount_open": "500", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "due_date": "2018-04-29", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## invoice\_call\_reminder\_performed ```json theme={null} { "event": { "event_name": "invoice_call_reminder_performed", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "due_date": "2018-04-29", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## payment\_plan\_created The requests for `payment_plan_updated`, `payment_plan_finished` and `payment_plan_deactivated` are similar, the only difference is the event\_name. ### invoice ```json theme={null} { "event": { "event_name": "payment_plan_created", "context": { "id": 1, "auto_activated": false, "resource_type": "payment_plan", "created_at": "2018-06-05T09:56:06Z", "link": "https://app.paytsoftware.com/administrations/1/debtors/1/paymentplans/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a/p/dp5h1i5cuu94nopiolkdst3u17vkmzo", "invoices": [ { "id": 2, "invoice_number": "1", "invoice_date": "2011-12-17", "due_date": "2012-01-16", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529" } ], "credit_cases": [ { "id": 3, "case_number": "972 507 233", "credit_case_number": "972 507 233", "link": "https://app.paytsoftware.com/administrations/1/credit_cases/1", "public_link": "https://backend.paytsoftware.com/inzien/zaken/247b9bb643378be8a9f8bea722fa3c442eef64a6" } ], "debtor": { "id": 2, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" } }, "event_time": "2018-06-05T09:56:37.314159Z" } } ``` ### debt collection case (`resource_type`: `credit_case`) ```json theme={null} { "event": { "event_name": "payment_plan_created", "context": { "id": 1, "created_at": "2018-06-05T09:56:06Z", "link": "https://app.paytsoftware.com/administrations/1/debtors/1/paymentplans/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a/p/dp5h1i5cuu94nopiolkdst3u17vkmzo", "resource_type": "payment_plan", "auto_activated": false, "administration": { "company_code": "ADM_1", "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "credit_cases": [ { "id": 3, "credit_case_number": "972 507 233", "case_number": "972 507 233", "link": "https://app.paytsoftware.com/administrations/1/credit_cases/1", "public_link": "https://backend.paytsoftware.com/inzien/zaken/247b9bb643378be8a9f8bea722fa3c442eef64a6", "internal_note_email_address": "internal+df797e50-95f6-4387-9dff-ec6cde0c9aa4@replytest.paytsoftware.com", "invoices": [ { "id": 90, "invoice_number": "2011-27-f553g", "category": null, "payment_condition": null } ] } ], "debtor": { "id": 2, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14", "amount_open": "1000", "amount_total": "1337", "book_amount_open": "1000", "book_amount_total": "1337", "book_currency_code": "EUR", "collection_costs": "127.02", "currency_code": "EUR", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "due_date": "2012-01-16", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "interest": "7.06", "invoice_date": "2011-12-17", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "open_administration_costs": "8.0", "order_number": "1244354", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "purchase_order_number": "92383487529", "total_administration_costs": "10.0", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download" } ] }, "event_time": "2018-06-05T09:56:37.314159Z" } } ``` ## payment\_plan\_term\_expired ```json theme={null} { "event": { "event_name": "payment_plan_term_expired", "context": { "id": 1, "resource_type": "payment_plan_term", "created_at": "2018-06-05T09:56:06Z", "payment_date": "2011-12-17", "due_date": "2012-01-16", "amount": "1337", "amount_due": "1000", "debtor": { "id": 2, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14" } ], "credit_cases": [ { "id": 3, "credit_case_number": "972 507 233" } ], "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "payment_plan": { "id": 1, "created_at": "2018-06-05T09:56:06Z", "link": "https://app.paytsoftware.com/administrations/1/debtors/1/paymentplans/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a/p/dp5h1i5cuu94nopiolkdst3u17vkmzo", "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14" } ], "credit_cases": [ { "id": 3, "credit_case_number": "972 507 233" } ], "debtor": { "id": 2, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" } }, "psp_transactions": [ { "id": 1, "created_at": "2018-06-05T09:48:54.314159Z", "paid_at": "2018-06-05T09:48:54.314159Z", "remote_payment_identifier": "rpi_wlkj234452jkwlasdo3534adf", "bank_account_name": "Bosch-Brink", "bank_account_number": "NL19ABNM0123456789", "payment_method": "ideal", "amount": "337.0", "currency_code": "EUR", "reversal_code": null } ] }, "event_time": "2018-06-05T09:56:37.314159Z" } } ``` ## invoice\_new\_comment ```json theme={null} { "event": { "event_name": "invoice_new_comment", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T10:00:11.314159Z" } } ``` ## case\_new\_comment ```json theme={null} { "event": { "event_name": "case_new_comment", "context": { "id": 1, "resource_type": "credit_case", "case_number": "123 456 789", "credit_case_number": "123 456 789", "interest": "1.23", "internal_note_email_address": "internal-notes+123456@payt.nl", "collection_costs": "40.00", "open_interest_and_collection_costs": "2.05", "currency_code": "EUR", "started_at": "2018-03-30", "link": "https://app.paytsoftware.com/administrations/1/creditcases/1", "public_link": "https://factuurinzien.nl/d/8f839738eeec7cbbdcb8a0d55b7132714dcef12b/c/ddb245d6df67999eca48c4a71b5661b93038e20a", "invoices": [ { "id": 2, "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/2", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "40.00", "debt_collection_costs_open": "10.00", "debt_collection_costs_total": "40.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" } ], "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [ { "id": 2, "paid_at": "2023-09-25T13:59:49.916Z", "created_at": "2023-09-25T13:59:49.917Z", "remote_payment_identifier": "id_1", "amount": "376.18", "bank_account_number": "NL19ABNM0123456789", "bank_account_name": "Bosch-Brink", "book_amount": "376.18", "currency_code": "EUR", "payment_method": "ideal", "refunded_amount": "0.00", "reversal_code": null } ], "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T10:02:48.314159Z" } } ``` ## debtor\_new\_comment ```json theme={null} { "event": { "event_name": "debtor_new_comment", "context": { "resource_type": "debtor", "book_open_amount": 1798.0, "category": "Debtor category", "company_name": "Some company name", "credit_limit_amount": 1100.0, "debtor_code": "2", "id": 730816, "link": "http://example.com/administrations/878/debtors/730816", "name": "Some name", "public_link": "http://example.com/d/88dc5akhqjh3dnbij3xjkjlsuusgixx", "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14" } ], "administration": { "company_code": null, "id": 878, "name": "Test administratie", "origin_id": "701174" }, "contact": { "id": "2", "contact_identifier": "123456", "name": "Some name", "resource_type": "contact", "invoice_custom_email_address": "new_email@address.com", "custom_email_address": "new_email@address.com" }, "labels": [ { "name": "Risico" } ], "psp_mandate": null, "revoked_psp_mandates": [] }, "event_time": "2019-04-12T11:47:12.314159Z" } } ``` ## psp\_transaction\_successful ### invoice ```json theme={null} { "event": { "event_name": "psp_transaction_successful", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "psp_transactions": [ { "id": 2, "paid_at": "2023-09-25T13:59:49.916Z", "created_at": "2023-09-25T13:59:49.917Z", "remote_payment_identifier": "id_1", "bank_account_name": "Bosch-Brink", "bank_account_number": "NL19ABNM0123456789", "payment_method": "ideal", "amount": "337.0", "refunded_amount": "0.00", "currency_code": "EUR", "reversal_code": null } ], "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T10:08:20.314159Z" } } ``` ### debt collection case (`resource_type`: `credit_case`) ```json theme={null} { "event": { "event_name": "psp_transaction_successful", "context": { "id": 1, "resource_type": "credit_case", "credit_case_number": "123 456 789", "interest": "1.23", "collection_costs": "40.00", "open_interest_and_collection_costs": "2.05", "currency_code": "EUR", "started_at": "2018-03-30", "link": "https://app.paytsoftware.com/administrations/1/creditcases/1", "psp_transactions": [ { "id": 2, "paid_at": "2023-09-25T13:59:49.916Z", "created_at": "2023-09-25T13:59:49.917Z", "remote_payment_identifier": "id_1", "bank_account_name": "Bosch-Brink", "bank_account_number": "NL19ABNM0123456789", "payment_method": "ideal", "amount": "376.18", "refunded_amount": "0.00", "currency_code": "EUR", "reversal_code": null } ], "public_link": "https://factuurinzien.nl/d/8f839738eeec7cbbdcb8a0d55b7132714dcef12b/c/ddb245d6df67999eca48c4a71b5661b93038e20a", "invoices": [ { "id": 2, "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "40.00", "debt_collection_costs_open": "10.00", "debt_collection_costs_total": "40.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" } ], "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T10:08:20.314159Z" } } ``` ### payment plan ```json theme={null} { "event": { "event_name": "psp_transaction_successful", "context": { "id": 1, "resource_type": "payment_plan_term", "created_at": "2018-06-05T09:56:06Z", "payment_date": "2011-12-17", "due_date": "2012-01-16", "amount": "1337", "amount_due": "1000", "debtor": { "id": 2, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14" } ], "credit_cases": [ { "id": 3, "credit_case_number": "972 507 233" } ], "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "payment_plan": { "id": 1, "created_at": "2018-06-05T09:56:06Z", "link": "https://app.paytsoftware.com/administrations/1/debtors/1/paymentplans/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a/p/dp5h1i5cuu94nopiolkdst3u17vkmzo", "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14" } ], "credit_cases": [ { "id": 3, "credit_case_number": "972 507 233" } ], "debtor": { "id": 2, "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" } }, "psp_transactions": [ { "id": 2, "paid_at": "2023-09-25T13:59:49.916Z", "created_at": "2023-09-25T13:59:49.917Z", "remote_payment_identifier": "id_1", "bank_account_name": "Bosch-Brink", "bank_account_number": "NL19ABNM0123456789", "payment_method": "ideal", "amount": "337.0", "refunded_amount": "0.00", "currency_code": "EUR", "reversal_code": null } ] }, "event_time": "2018-06-05T10:08:20.314159Z" } } ``` ## psp\_transaction\_charged\_back ### invoice ```json theme={null} { "event": { "event_name": "psp_transaction_charged_back", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "psp_transactions": [], "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T10:08:20.314159Z" } } ``` ## psp\_transaction\_refunded ### invoice ```json theme={null} { "event": { "event_name": "psp_transaction_refunded", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "psp_transactions": [], "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T10:08:20.314159Z" } } ``` ## todo\_list\_item\_created ```json theme={null} { "event": { "event_name": "todo_list_item_created", "context": { "id": 1, "link": "https://app.paytsoftware.com/companies/1/tasks/1", "resource_type": "todo_list_item", "assigned_to": { "id": 1, "email": "example@paytsoftware.com", "username": "john_doe", "resource_type": "user" }, "completed_at": null }, "event_time": "2026-01-08T09:39:22.727097Z" } } ``` ## todo\_list\_item\_updated See [`todo_list_item_created`](#todo_list_item_created) ## todo\_list\_item\_deleted See [`todo_list_item_created`](#todo_list_item_created) ## invoice\_step\_performed ```json theme={null} { "event": { "event_name": "invoice_step_performed", "context": { "resource_type": "invoice_step", "id": 1, "name": "invoice_send", "performed_at": "2018-06-19T16:05:42Z", "invoice": { "id": 1, "invoice_number": "18603008", "invoice_date": "2018-06-19", "due_date": "2018-07-03", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529" }, "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" } }, "event_time": "2018-06-20T08:18:00.314159Z" } } ``` ## invoice\_to\_debt\_collection ```json theme={null} { "event": { "event_name": "invoice_to_debt_collection", "context": { "id": 6842883, "resource_type": "invoice", "invoice_number": "12456", "invoice_date": "2018-06-20", "due_date": "2018-07-05", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "document_url": "https://backend.paytsoftware.com/inzien/facturen/dd6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1311412, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-20T08:21:56.314159Z" } } ``` ## bundled\_reminder\_sent ```json theme={null} { "event": { "event_name": "bundled_reminder_sent", "context": { "id": 1, "resource_type": "bundled_reminder", "sent_at": "2018-07-05T09:49:37Z", "type": "basic", "sent_as_format": "email", "sent_to_email_address": "noa.jacobs@example.com", "sent_to_letter_address": null, "invoices": [ { "id": 7, "invoice_number": "2011-7", "invoice_date": "2018-05-06", "due_date": "2018-06-05", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/dd6d7994/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/8/invoices/7", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/1337432b7847d1eaeee4bd02158144bcaf5fd58f233", "order_number": "1244354", "purchase_order_number": "92383487529" }, { "id": 8, "invoice_number": "2011-8", "invoice_date": "2018-05-06", "due_date": "2018-06-05", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/dd6d7994/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/8/invoices/8", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/1337432b7847d1eaeee4bd02158144bcaf5fd58f233", "order_number": "1244354", "purchase_order_number": "92383487529" } ], "debtor": { "id": 8, "category": "Debtor category", "company_name": "Boer, Vermeulen and Haan", "name": "Boer, Vermeulen and Haan", "debtor_code": "8", "link": "https://app.paytsoftware.com/administrations/8/debtors/8", "public_link": "https://factuurinzien.nl/d/cb0fa86b5bcf803d554b872a3d60072eb9d1cc04" }, "administration": { "id": 8, "name": "Administratie 8", "origin_id": "ADM_7" } }, "event_time": "2018-07-05T09:49:37.314159Z" } } ``` ## bundled\_reminder\_invoice\_performed ```json theme={null} { "event": { "event_name": "bundled_reminder_invoice_performed", "context": { "resource_type": "bundled_reminder_invoice", "id": 1, "name": "reminder_2", "performed_at": "2018-06-19T16:05:42Z", "invoice": { "id": 1, "invoice_number": "18603008", "invoice_date": "2018-06-19", "due_date": "2018-07-03", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529" }, "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" } }, "event_time": "2018-06-20T08:18:00.314159Z" } } ``` ## case\_created ```json theme={null} { "event": { "event_name": "case_created", "context": { "id": 1, "resource_type": "credit_case", "credit_case_number": "123 456 789", "interest": "12.34", "collection_costs": "40.0", "open_interest_and_collection_costs": "2.05", "currency_code": "EUR", "started_at": "2018-03-30", "link": "https://app.paytsoftware.com/administrations/1/creditcases/1", "public_link": "https://factuurinzien.nl/d/8f839738eeec7cbbdcb8a0d55b7132714dcef12b/c/ddb245d6df67999eca48c4a71b5661b93038e20a", "invoices": [ { "id": 2, "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "40.00", "debt_collection_costs_open": "10.00", "debt_collection_costs_total": "40.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" }, { "id": 3, "invoice_number": "2011-2", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "0.00", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" } ], "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## case\_step\_performed ```json theme={null} { "event": { "event_name": "case_step_performed", "context": { "resource_type": "case_step", "name": "summons", "performed_at": "2019-04-12T10:31:01Z", "credit_case": { "id": "1234", "case_number": "123 456 789", "credit_case_number": "123 456 789", "link": "https://app.paytsoftware.com/administrations/123/creditcases/123", "public_link": "https://factuurinzien.nl/d/8f839738eeec7cbbdcb8a0d55b7132714dcef12b/c/123", "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14" } ] }, "debtor": { "id": 1872168, "category": "Debtor category", "company_name": "Voorbeeldig B.V.", "name": "J. Jansen", "debtor_code": "12345", "link": "https://app.paytsoftware.com/administrations/1234/debtors/1234", "public_link": "https://factuurinzien.nl/d/1234" }, "administration": { "id": 1234, "name": "Administratie 8", "origin_id": "ADM_8" } }, "event_time": "2019-04-12T11:45:38.314159Z" } } ``` ## case\_to\_bailiff ```json theme={null} { "event": { "event_name": "case_to_bailiff", "context": { "id": 1, "resource_type": "credit_case", "credit_case_number": "123 456 789", "interest": "1.23", "collection_costs": "40.00", "open_interest_and_collection_costs": "2.05", "currency_code": "EUR", "started_at": "2018-03-30T11:45:38.314159Z", "link": "https://app.paytsoftware.com/administrations/1/creditcases/1", "public_link": "https://factuurinzien.nl/d/8f839738eeec7cbbdcb8a0d55b7132714dcef12b/c/ddb245d6df67999eca48c4a71b5661b93038e20a", "invoices": [ { "id": 2, "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "40.00", "debt_collection_costs_open": "10.00", "debt_collection_costs_total": "40.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" } ], "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## case\_paid ```json theme={null} { "event": { "event_name": "case_paid", "context": { "id": 1, "resource_type": "credit_case", "credit_case_number": "123 456 789", "interest": "12.34", "collection_costs": "40.0", "open_interest_and_collection_costs": "0.00", "currency_code": "EUR", "started_at": "2018-03-30", "link": "https://app.paytsoftware.com/administrations/1/creditcases/1", "public_link": "https://factuurinzien.nl/d/8f839738eeec7cbbdcb8a0d55b7132714dcef12b/c/ddb245d6df67999eca48c4a71b5661b93038e20a", "invoices": [ { "id": 2, "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "0.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "40.00", "debt_collection_costs_open": "10.00", "debt_collection_costs_total": "40.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" }, { "id": 3, "invoice_number": "2011-2", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "0.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "0.00", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" } ], "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [ { "id": 1, "created_at": "2018-06-05T09:48:54.314159Z", "paid_at": "2018-06-05T09:48:54.314159Z", "remote_payment_identifier": "rpi_wlkj234452jkwlasdo3534adf", "bank_account_name": "Bosch-Brink", "bank_account_number": "NL19ABNM0123456789", "payment_method": "ideal", "amount": "337.0", "currency_code": "EUR", "reversal_code": null } ], "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## case\_invoice\_amount\_paid ```json theme={null} { "event": { "event_name": "case_invoice_amount_paid", "context": { "id": 1, "resource_type": "credit_case", "credit_case_number": "123 456 789", "interest": "12.34", "collection_costs": "40.0", "open_interest_and_collection_costs": "0.00", "currency_code": "EUR", "started_at": "2018-03-30", "link": "https://app.paytsoftware.com/administrations/1/creditcases/1", "public_link": "https://factuurinzien.nl/d/8f839738eeec7cbbdcb8a0d55b7132714dcef12b/c/ddb245d6df67999eca48c4a71b5661b93038e20a", "invoices": [ { "id": 2, "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "0.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "40.00", "debt_collection_costs_open": "10.00", "debt_collection_costs_total": "40.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" }, { "id": 3, "invoice_number": "2011-2", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "0.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "0.00", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" } ], "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [ { "id": 1, "created_at": "2018-06-05T09:48:54.314159Z", "paid_at": "2018-06-05T09:48:54.314159Z", "remote_payment_identifier": "rpi_wlkj234452jkwlasdo3534adf", "bank_account_name": "Bosch-Brink", "bank_account_number": "NL19ABNM0123456789", "payment_method": "ideal", "amount": "337.0", "currency_code": "EUR", "reversal_code": null } ], "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## case\_reopened ```json theme={null} { "event": { "event_name": "case_reopened", "context": { "id": 1, "resource_type": "credit_case", "credit_case_number": "123 456 789", "interest": "12.34", "collection_costs": "40.0", "open_interest_and_collection_costs": "2.05", "currency_code": "EUR", "started_at": "2018-03-30", "link": "https://app.paytsoftware.com/administrations/1/creditcases/1", "public_link": "https://factuurinzien.nl/d/8f839738eeec7cbbdcb8a0d55b7132714dcef12b/c/ddb245d6df67999eca48c4a71b5661b93038e20a", "invoices": [ { "id": 2, "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "40.00", "debt_collection_costs_open": "10.00", "debt_collection_costs_total": "40.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" }, { "id": 3, "invoice_number": "2011-2", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "0.00", "debt_collection_costs_open": "10.00", "debt_collection_costs_total": "40.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" } ], "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## credit\_limit\_exceeded ```json theme={null} { "event": { "event_name": "credit_limit_exceeded", "context": { "resource_type": "debtor", "credit_limit_amount": 1100.0, "autogenerated_credit_limit_amount": 1200.0, "book_open_amount": 1798.0, "category": "Debtor category", "company_name": "Some company name", "psp_mandate": null, "revoked_psp_mandates": [], "debtor_code": "2", "id": 730816, "link": "http://example.com/administrations/878/debtors/730816", "name": "Some name", "public_link": "http://example.com/d/88dc5akhqjh3dnbij3xjkjlsuusgixx", "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14" } ], "administration": { "id": 878, "name": "Test administratie", "origin_id": "701174" }, "labels": [ { "name": "Risico" } ], "contact": { "id": "2", "contact_identifier": "123456", "name": "Some name", "resource_type": "contact" } }, "event_time": "2019-04-12T11:45:38.314159Z" } } ``` ## label\_added ### invoice ```json theme={null} { "event": { "event_name": "label_added", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "due_date": "2018-04-29", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [ { "name": "Risico" }, { "name": "Failliet" } ] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ### debtor ```json theme={null} { "event": { "event_name": "label_added", "context": { "id": 1, "resource_type": "debtor", "debtor_code": "1", "credit_limit_amount": null, "autogenerated_credit_limit_amount": null, "book_open_amount": 6812.61, "category": "Debtor category", "company_name": "Some company name", "psp_mandate": null, "revoked_psp_mandates": [], "labels": [ { "name": "Label 3" } ], "link": "http://localhost:5000/administrations/1/debtors/1", "name": "Some name", "public_link": "http://localhost:5001/d/2eg16i6qg179nvhqqesr8xf009ah3dp", "invoices": [ { "id": 1, "invoice_number": "2011-1", "category": "Invoice category", "payment_condition": "14" } ], "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "contact": { "id": "2", "contact_identifier": "123456", "name": "Some name", "resource_type": "contact" } }, "event_time": "2022-04-12T12:27:34.019458Z" } } ``` ### debt collection case (`resource_type`: `credit_case`) ```json theme={null} { "event": { "event_name": "label_added", "context": { "id": 1, "resource_type": "credit_case", "credit_case_number": "298 836 412", "collection_costs": "40.00", "open_interest_and_collection_costs": "2.05", "currency_code": "EUR", "interest": "1.23", "labels": [ { "name": "Label 3" } ], "link": "https://app.paytsoftware.com/administrations/1/creditcases/1", "public_link": "https://factuurinzien.nl/d/8f839738eeec7cbbdcb8a0d55b7132714dcef12b/c/ddb245d6df67999eca48c4a71b5661b93038e20a", "started_at": "2022-04-12 12:38:50 UTC", "invoices": [ { "id": 2, "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "40.00", "debt_collection_costs_open": "10.00", "debt_collection_costs_total": "40.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" } ], "debtor": { "id": 3, "category": "Debtor category", "company_name": "Croissantgigant", "name": "Croissantgigant", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 7, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [] }, "event_time": "2022-04-12T12:38:53.755637Z" } } ``` ## label\_removed ### invoice ```json theme={null} { "event": { "event_name": "label_removed", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "due_date": "2018-04-29", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ### debtor ```json theme={null} { "event": { "event_name": "label_removed", "context": { "id": 1, "resource_type": "debtor", "debtor_code": "1", "credit_limit_amount": null, "autogenerated_credit_limit_amount": null, "book_open_amount": 4527.29, "category": "Debtor category", "company_name": "Croissantgigant", "psp_mandate": null, "revoked_psp_mandates": [], "labels": [ { "name": "Label 3" } ], "link": "http://localhost:5000/administrations/4/debtors/2", "name": "Croissantgigant", "public_link": "http://localhost:5001/d/mqaq3kc1xnepllgbyicn2fh6uheqa81", "invoices": [ { "id": 1, "invoice_number": "2011-1", "category": "Invoice category", "payment_condition": "14" } ], "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "contact": { "id": "2", "contact_identifier": "123456", "name": "Some name", "resource_type": "contact" } }, "event_time": "2022-04-12T12:35:54.446625Z" } } ``` ### debt collection case (`resource_type`: `credit_case`) ```json theme={null} { "event": { "event_name": "label_removed", "context": { "id": 1, "resource_type": "credit_case", "credit_case_number": "226 700 932", "collection_costs": "40.00", "open_interest_and_collection_costs": "2.05", "currency_code": "EUR", "interest": "1.23", "labels": [ { "name": "Label 3" } ], "link": "https://app.paytsoftware.com/administrations/1/creditcases/1", "public_link": "https://factuurinzien.nl/d/8f839738eeec7cbbdcb8a0d55b7132714dcef12b/c/ddb245d6df67999eca48c4a71b5661b93038e20a", "started_at": "2022-04-12 12:40:34 UTC", "invoices": [ { "id": 2, "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "40.00", "debt_collection_costs_open": "10.00", "debt_collection_costs_total": "40.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" } ], "debtor": { "id": 4, "category": "Debtor category", "company_name": "Croissantgigant", "name": "Croissantgigant", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 10, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [] }, "event_time": "2022-04-12T12:43:24.027839Z" } } ``` ## debtor\_email\_address\_provided ```json theme={null} { "event": { "event_name": "debtor_email_address_provided", "context": { "resource_type": "debtor", "credit_limit_amount": 1100.0, "autogenerated_credit_limit_amount": 1200.0, "book_open_amount": 1798.0, "category": "Debtor category", "company_name": "Some company name", "psp_mandate": null, "revoked_psp_mandates": [], "debtor_code": "2", "id": 730816, "link": "http://example.com/administrations/878/debtors/730816", "name": "Some name", "public_link": "http://example.com/d/88dc5akhqjh3dnbij3xjkjlsuusgixx", "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14" } ], "administration": { "company_code": null, "id": 878, "name": "Test administratie", "origin_id": "701174" }, "labels": [ { "name": "Risico" } ], "contact": { "id": "2", "contact_identifier": "123456", "name": "Some name", "resource_type": "contact", "invoice_custom_email_address": "new_email@address.com", "custom_email_address": "new_email@address.com" } }, "event_time": "2019-04-12T11:45:38.314159Z" } } ``` ## debtor\_email\_address\_removed ```json theme={null} { "event": { "event_name": "debtor_email_address_removed", "context": { "resource_type": "debtor", "credit_limit_amount": 1100.0, "autogenerated_credit_limit_amount": 1200.0, "book_open_amount": 1798.0, "category": "Debtor category", "company_name": "Some company name", "psp_mandate": null, "revoked_psp_mandates": [], "debtor_code": "2", "id": 730816, "link": "http://example.com/administrations/878/debtors/730816", "name": "Some name", "public_link": "http://example.com/d/88dc5akhqjh3dnbij3xjkjlsuusgixx", "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14" } ], "administration": { "company_code": null, "id": 878, "name": "Test administratie", "origin_id": "701174" }, "labels": [ { "name": "Risico" } ], "contact": { "id": "2", "contact_identifier": "123456", "name": "Some name", "resource_type": "contact", "invoice_custom_email_address": null, "custom_email_address": null } }, "event_time": "2019-04-12T11:45:38.314159Z" } } ``` ## creditworthiness\_changed ```json theme={null} { "event": { "event_name": "creditworthiness_changed", "context": { "resource_type": "debtor", "credit_limit_amount": 1100.0, "autogenerated_credit_limit_amount": 1200.0, "book_open_amount": 1798.0, "category": "Debtor category", "company_name": "Some company name", "psp_mandate": null, "revoked_psp_mandates": [], "creditworthiness_profile": { "bankruptcy": true, "credit_information_uncertain": false, "credit_limit_amount": 110000, "credit_limit_currency_code": "EUR", "creditworthiness_critical": true, "creditworthiness_ok": false, "creditworthiness_uncertain": false, "debt_restructuring": false, "suggested_coc_number": null, "suspension_of_payments": false }, "debtor_code": "2", "id": 730816, "link": "http://example.com/administrations/878/debtors/730816", "name": "Some name", "public_link": "http://example.com/d/88dc5akhqjh3dnbij3xjkjlsuusgixx", "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14" } ], "administration": { "company_code": null, "id": 878, "name": "Test administratie", "origin_id": "701174" }, "labels": [ { "name": "Risico" } ], "contact": { "id": "2", "contact_identifier": "123456", "name": "Some name", "resource_type": "contact" } }, "event_time": "2019-04-12T11:45:38.314159Z" } } ``` ## psp\_mandate\_created ```json theme={null} { "event": { "event_name": "psp_mandate_created", "context": { "resource_type": "debtor", "credit_limit_amount": 1100.0, "autogenerated_credit_limit_amount": 1200.0, "book_open_amount": 1798.0, "category": "Debtor category", "company_name": "Some company name", "psp_mandate": { "bank_account_name": "Bosch-Brink", "bank_account_number": "NL19ABNM0123456789", "limit_amount": 300.0, "mandate_identifier": "CORE123", "customer_identifier": null, "provider": "twikey", "status": "signed" }, "revoked_psp_mandates": [], "debtor_code": "2", "id": 730816, "link": "http://example.com/administrations/878/debtors/730816", "name": "Some name", "public_link": "http://example.com/d/88dc5akhqjh3dnbij3xjkjlsuusgixx", "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14" } ], "administration": { "company_code": null, "id": 878, "name": "Test administratie", "origin_id": "701174" }, "labels": [ { "name": "Risico" } ], "contact": { "id": "2", "contact_identifier": "123456", "name": "Some name", "resource_type": "contact" } }, "event_time": "2019-04-12T11:45:38.314159Z" } } ``` ## psp\_mandate\_revoked ```json theme={null} { "event": { "event_name": "psp_mandate_revoked", "context": { "resource_type": "debtor", "credit_limit_amount": 1100.0, "autogenerated_credit_limit_amount": 1200.0, "book_open_amount": 1798.0, "category": "Debtor category", "company_name": "Some company name", "psp_mandate": null, "revoked_psp_mandates": [ { "mandate_identifier": "CORE123", "customer_identifier": null, "provider": "twikey", "status": "revoked" } ], "debtor_code": "2", "id": 730816, "link": "http://example.com/administrations/878/debtors/730816", "name": "Some name", "public_link": "http://example.com/d/88dc5akhqjh3dnbij3xjkjlsuusgixx", "invoices": [ { "id": 2, "invoice_number": "1", "category": "Invoice category", "payment_condition": "14" } ], "administration": { "company_code": null, "id": 878, "name": "Test administratie", "origin_id": "701174" }, "labels": [ { "name": "Risico" } ], "contact": { "id": "2", "contact_identifier": "123456", "name": "Some name", "resource_type": "contact" } }, "event_time": "2019-04-12T11:45:38.314159Z" } } ``` ## invoice\_sms\_failed ```json theme={null} { "event": { "event_name": "invoice_sms_failed", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "due_date": "2018-04-29", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## invoice\_ubl\_failed ```json theme={null} { "event": { "event_name": "invoice_ubl_failed", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "due_date": "2018-04-29", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## incoming\_ubl\_received ```json theme={null} { "event": { "event_name": "incoming_ubl_received", "context": { "id": "019aa1be-0be9-7fa6-a755-700e0ac77416", "document_id": "DOC-e9b03870af825d19", "party_identifier": "NL:KVK:12345678", "topic": "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2", "url": "https://backend.paytsoftware.com/file_storage/disk/SI-UBL-INV-1.2-ok-full.xml", "details": { "topic": "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2", "partyId": "NL:KVK:12345678", "hookId": "2", "documentId": "DOC-e9b03870af825d19", "createdOn": "2025-10-27T15:05:37.498735+00:00", "sentOn": "2025-10-27T15:05:37.7074839+00:00", "message": "'Invoice' received.", "details": { "userName": "Payt", "createdBy": "Ping", "sender": "NL:KVK:PAYTTEST2", "senderName": "Paytsoftware", "senderLegalId": "NL:KVK:PAYTTEST2", "senderEmailAddress": "servicedesk@paytsoftware.com", "receiverName": "Customer BV", "receiverLegalId": "NL:KVK:PAYTTEST2", "issueDate": "2025-10-27 00:00:00Z", "id": "DOC-e9b03870af825d19", "documentTypeId": "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0::2.1", "profileId": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0", "receiver": "NL:KVK:PAYTTEST2", "messageId": null, "refToMessageId": null } }, "created_at": "2025-11-20T14:49:38.024919Z", "administration": { "company_code": "ADM_1", "id": 145, "name": "Administratie 4", "origin_id": "WEBHOOKS1" } }, "event_time": "2025-11-20T14:49:39.112140Z" } } ``` ## invoice\_letter\_returned ```json theme={null} { "event": { "event_name": "invoice_letter_returned", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "due_date": "2018-04-29", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## email\_bounced The `administration` and `debtor` objects are always present. Of the `invoice`, `credit_case`, `bundled_reminder`, and `message` objects exactly 1 will be present. ```json theme={null} { "event": { "event_name": "email_bounced", "context": { "id": "82917048", "resource_type": "email", "bcc_email_addresses": null, "cc_email_addresses": "cc@example.com", "content_category": "final_reminder", "email_addresses": "payables@debtor.com,other@example.com", "headers": {}, "subject": "Final reminder for invoice 123", "bounces": [ { "email_address": "other@example.com", "reason": "unknown", "soft_bounce": false, "response": null, "bounced_at": "2025-12-01T09:48:55.314159Z" } ], "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig", "company_code": "asdf" }, "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "invoice": { "id": 1, "category": "sales", "invoice_number": "1", "payment_condition": null }, "credit_case": {}, "bundled_reminder": {}, "message": {} }, "event_time": "2025-12-01T09:48:55.334567Z" } } ``` ## invoice\_email\_bounced ```json theme={null} { "event": { "event_name": "invoice_email_bounced", "context": { "id": 1, "resource_type": "invoice", "invoice_number": "2011-1", "invoice_date": "2018-03-30", "amount_total": "1337", "amount_open": "0", "book_amount_total": "1337", "book_amount_open": "0", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "due_date": "2018-04-29", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "psp_transactions": [], "labels": [] }, "event_time": "2018-06-05T09:48:55.314159Z" } } ``` ## bundled\_reminder\_email\_bounced ```json theme={null} { "event": { "event_name": "bundled_reminder_email_bounced", "context": { "id": 1, "resource_type": "bundled_reminder", "sent_at": "2018-07-05T09:49:37Z", "type": "basic", "sent_as_format": "email", "sent_to_email_address": "noa.jacobs@example.com", "sent_to_letter_address": null, "invoices": [ { "id": 7, "invoice_number": "2011-7", "invoice_date": "2018-05-06", "due_date": "2018-06-05", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/dd6d7994/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/8/invoices/7", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/1337432b7847d1eaeee4bd02158144bcaf5fd58f233", "order_number": "1244354", "purchase_order_number": "92383487529" }, { "id": 8, "invoice_number": "2011-8", "invoice_date": "2018-05-06", "due_date": "2018-06-05", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/dd6d7994/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/8/invoices/8", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/1337432b7847d1eaeee4bd02158144bcaf5fd58f233", "order_number": "1244354", "purchase_order_number": "92383487529" } ], "debtor": { "id": 8, "category": "Debtor category", "company_name": "Boer, Vermeulen and Haan", "name": "Boer, Vermeulen and Haan", "debtor_code": "8", "link": "https://app.paytsoftware.com/administrations/8/debtors/8", "public_link": "https://factuurinzien.nl/d/cb0fa86b5bcf803d554b872a3d60072eb9d1cc04" }, "administration": { "id": 8, "name": "Administratie 8", "origin_id": "ADM_7" } }, "event_time": "2018-07-05T09:49:37.314159Z" } } ``` ## bundled\_reminder\_letter\_returned ```json theme={null} { "event": { "event_name": "bundled_reminder_letter_returned", "context": { "id": 1, "resource_type": "bundled_reminder", "sent_at": "2018-07-05T09:49:37Z", "type": "basic", "sent_as_format": "letter", "sent_to_email_address": null, "sent_to_letter_address": "Waagstraat 4, 9712 JX Groningen", "invoices": [ { "id": 7, "invoice_number": "2011-7", "invoice_date": "2018-05-06", "due_date": "2018-06-05", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/dd6d7994/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/8/invoices/7", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/1337432b7847d1eaeee4bd02158144bcaf5fd58f233", "order_number": "1244354", "purchase_order_number": "92383487529" }, { "id": 8, "invoice_number": "2011-8", "invoice_date": "2018-05-06", "due_date": "2018-06-05", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "debt_collection_costs_open": "0.00", "debt_collection_costs_total": "0.00", "interest_costs_open": "0.00", "interest_costs_total": "0.00", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/dd6d7994/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/8/invoices/8", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/1337432b7847d1eaeee4bd02158144bcaf5fd58f233", "order_number": "1244354", "purchase_order_number": "92383487529" } ], "debtor": { "id": 8, "category": "Debtor category", "company_name": "Boer, Vermeulen and Haan", "name": "Boer, Vermeulen and Haan", "debtor_code": "8", "link": "https://app.paytsoftware.com/administrations/8/debtors/8", "public_link": "https://factuurinzien.nl/d/cb0fa86b5bcf803d554b872a3d60072eb9d1cc04" }, "administration": { "id": 8, "name": "Administratie 8", "origin_id": "ADM_7" } }, "event_time": "2018-07-05T09:49:37.314159Z" } } ``` ## case\_email\_bounced ```json theme={null} { "event": { "event_name": "case_email_bounced", "context": { "id": 1, "resource_type": "credit_case", "credit_case_number": "123 456 789", "interest": "1.23", "collection_costs": "40.00", "open_interest_and_collection_costs": "2.05", "currency_code": "EUR", "started_at": "2018-03-30", "link": "https://app.paytsoftware.com/administrations/1/creditcases/1", "psp_transactions": [ { "id": 2, "paid_at": "2023-09-25T13:59:49.916Z", "created_at": "2023-09-25T13:59:49.917Z", "remote_payment_identifier": "id_1", "bank_account_name": "Bosch-Brink", "bank_account_number": "NL19ABNM0123456789", "payment_method": "ideal", "amount": "376.18", "currency_code": "EUR", "reversal_code": null } ], "public_link": "https://factuurinzien.nl/d/8f839738eeec7cbbdcb8a0d55b7132714dcef12b/c/ddb245d6df67999eca48c4a71b5661b93038e20a", "invoices": [ { "id": 2, "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "40.00", "debt_collection_costs_open": "10.00", "debt_collection_costs_total": "40.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" } ], "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T10:08:20.314159Z" } } ``` ## case\_letter\_returned ```json theme={null} { "event": { "event_name": "case_letter_returned", "context": { "id": 1, "resource_type": "credit_case", "credit_case_number": "123 456 789", "interest": "1.23", "collection_costs": "40.00", "open_interest_and_collection_costs": "2.05", "currency_code": "EUR", "started_at": "2018-03-30", "link": "https://app.paytsoftware.com/administrations/1/creditcases/1", "psp_transactions": [ { "id": 2, "paid_at": "2023-09-25T13:59:49.916Z", "created_at": "2023-09-25T13:59:49.917Z", "remote_payment_identifier": "id_1", "bank_account_name": "Bosch-Brink", "bank_account_number": "NL19ABNM0123456789", "payment_method": "ideal", "amount": "376.18", "currency_code": "EUR", "reversal_code": null } ], "public_link": "https://factuurinzien.nl/d/8f839738eeec7cbbdcb8a0d55b7132714dcef12b/c/ddb245d6df67999eca48c4a71b5661b93038e20a", "invoices": [ { "id": 2, "invoice_number": "2011-1", "invoice_date": "2018-03-30", "due_date": "2018-04-29", "amount_total": "1337", "amount_open": "1000", "book_amount_total": "1337", "book_amount_open": "1000", "total_administration_costs": "10.0", "open_administration_costs": "8.0", "category": "Invoice category", "currency_code": "EUR", "book_currency_code": "EUR", "payment_condition": "14", "document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6d7999eca4/download", "ubl_document_url": "https://backend.paytsoftware.com/inzien/facturen/ddb245d6df67999eca4/ubl_download", "link": "https://app.paytsoftware.com/administrations/1/invoices/1", "public_link": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a", "order_number": "1244354", "purchase_order_number": "92383487529", "interest": "1.23", "collection_costs": "40.00", "debt_collection_costs_open": "10.00", "debt_collection_costs_total": "40.00", "interest_costs_open": "0.00", "interest_costs_total": "1.23" } ], "debtor": { "id": 1, "category": "Debtor category", "company_name": "Bosch-Brink", "name": "Bosch-Brink", "debtor_code": "1", "link": "https://app.paytsoftware.com/administrations/1/debtors/1", "public_link": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a" }, "administration": { "id": 1, "name": "Administratie 1", "origin_id": "Voorbeeldig" }, "labels": [ { "name": "Risico" } ] }, "event_time": "2018-06-05T10:08:20.314159Z" } } ``` # Webhooks Source: https://docs.paytsoftware.com/webhooks/overview Receive changes in the state of invoices, debtors, and debt collection cases in your own system. With webhooks, it is possible to send changes in the state of an invoice to an external system. An example of this is when you want to set up a delivery stop for a customer in the accounts, when an invoice of the customer is offered for collection. Normally, you would have to log into Payt to see which invoices are presented for collection and which customer it concerns. By means of webhooks, it is possible to automatically send a message (in the form of an HTTP request) to an external URL when an invoice is presented for collection. ## Delivery * Webhooks are delivered only to an HTTPS URL. * They are sent as a POST request with a JSON body. * All dates and timestamps are in [UTC](https://en.wikipedia.org/wiki/Coordinated_Universal_Time), formatted as [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601). * Redirects are followed. * Webhooks originate from a fixed IP address. See [IP addresses](/reference/ip-addresses). Each delivery includes these headers: | Header | Description | | ---------------------------------- | ------------------------------------------------------------------------------------------------------------- | | `X-PAYT-DELIVERY` | A UUID identifying the delivery attempt. | | `X-PAYT-ADMINISTRATION-IDENTIFIER` | The Payt internal identifier of the administration, when the event relates to an object of an administration. | | `X-PAYT-SIGNATURE` | HMAC signature of the payload. See [Verification](/webhooks/verification). | ### Payload * Every webhook contains a `debtor` and an `administration` object, used to identify the corresponding debtor or administration. * The context of an event is not always an invoice. It can also be a debtor, debt collection case, payment plan or planned payment. Connected invoices can be traced back through the invoice numbers in the nested data. * For OAuth applications, payloads only include fields your application is allowed to read via the granted OAuth scopes. For example, without the `debtors:read` scope, debtor details are omitted from the payload. ## Retries and timeout * The timeout for a webhook is 10 seconds. If your endpoint does not respond within 10 seconds, the attempt is considered failed. * Delivery is attempted up to 10 times with an increasing interval between attempts. If no `200 OK` is returned after 10 attempts, the webhook is not sent again. * If deliveries fail often within a certain time frame, the webhook is deactivated and an email is sent to you: to the notification email address of the administration, or to the developer email address of the application. Reactivate the webhook yourself once the processing problem is resolved. ## Reliability and ordering * Delivery is asynchronous and **order is not guaranteed**. If two events occur simultaneously (for example, `invoice_paid` and `payment_plan_finished`), their order is unpredictable. You may even receive events for an invoice before its `invoice_created` event arrives. * A useful pattern: when you receive an event for an object you don't know yet, respond with `404 Not Found`. The event is retried and can be processed after `invoice_created` arrives. * Event timestamps are not guaranteed to be unique, even within the same invoice or debtor. Simultaneous events most likely share the same timestamp. ## Matching records The `origin_id` of the administration contains, if known, the administration code of the external system loaded by Payt (for example Exact Online or Twinfield). This value can be empty, changed or outdated. Record the Payt database ids (the `id` attribute) in your own system and link them to your own IDs, so incoming events can be matched to the correct debtors and invoices. **Matching on invoice number alone is insufficient.** Invoice numbers are unique per administration, but the same number can appear across multiple administrations. If you process webhooks from multiple Payt administrations, account for invoice numbers occurring in more than one administration. ## Mutual TLS Mutual TLS (mTLS) is a security protocol that ensures both the client and the server in a communication channel authenticate each other using digital certificates. Unlike standard TLS, which only verifies the server’s identity, mTLS adds an additional layer of security by also verifying the client's identity. This mutual authentication ensures that: * The server trusts the client sending requests. * The client trusts the server receiving the requests. By implementing mTLS, you can protect sensitive data, prevent unauthorized access, and reduce the risk of man-in-the-middle attacks. `payt_mtls_certificate_2026.crt` (valid until 2027-01-03) You will be notified by email when a new certificate is available. We use the email address that is specified in the relevant webhook for this. # Triggers Source: https://docs.paytsoftware.com/webhooks/triggers Several actions within Payt can trigger multiple webhook events. Note that all events for which the conditions apply will be sent. And since the events are sent asynchronously it is, for example, possible to receive `invoice_closed` before `invoice_created` for the same invoice. Webhooks may be delivered more than once, so make sure their processing is idempotent. Every webhook event has a unique ID that can be used to track whether the event has already been received. ## Importing an invoice * When the invoice is imported for the first time * `invoice_created` * When the open amount is changed * `invoice_payment_created` * When the open amount is changed to zero * `invoice_paid` * When the invoice was already sent to the debtor * `invoice_closed` * When the invoice is part of a debt collection case and the principal amount and costs of the debt collection case have been fully paid * `case_paid` * When the invoice is part of a debt collection case and the principal amount has been fully paid, but not yet all of the additional costs * `case_invoice_amount_paid` * When the open amount is changed from zero * `invoice_reopened` * When the open administration costs are changed * `invoice_payment_created` * When the open interest costs are changed * `invoice_payment_created` * When the open debt-collection costs are changed * `invoice_payment_created` * When the sum of the open amounts of the debtor exceeds the credit-limit * `credit_limit_exceeded` ## Creating a debt collection case * `case_created` * For each invoice in the debt collection case that has open administration costs, these costs are credited * `invoice_payment_created` * For each invoice in the debt collection case interest costs are added, if applicable * `invoice_payment_created` * For the oldest invoice in the debt collection case debt collection costs are added * `invoice_payment_created` ## Registering a payment/remission of the costs on the debt collection case Payments are always final and cannot be changed or deleted. When a payment is reverted by a user, a new payment is created that is the inverse of the original. * For each invoice in the debt collection case that has open debt-collection costs * `invoice_payment_created` * For each invoice in the debt collection case that has open interest costs * `invoice_payment_created` ## Registering a payment/remission for the administration costs on an invoice Payments are always final and cannot be changed or deleted. When a payment is reverted by a user, a new payment is created that is the inverse of the original. * `invoice_payment_created` ## Performing a step for an invoice * `invoice_step_performed` * When the invoice is marked for debt collection * `invoice_to_debt_collection` * When administration costs are added to the invoice * `invoice_payment_created` ## Sending a bundled reminder * `bundled_reminder_sent` * When administration costs are added to the bundled reminder * administration costs are added to the oldest invoice that triggered the bundled reminder * `invoice_payment_created` * administration costs are removed from all other invoices included in the bundled reminder * `invoice_payment_created` # Verification Source: https://docs.paytsoftware.com/webhooks/verification Verify the X-PAYT-SIGNATURE header to confirm a webhook request was sent by Payt and has not been modified. In order to be able to verify that a webhook request is actually sent by Payt, and has not been modified since, a signature is included in each request. This signature is calculated based on the JSON payload and a secret key, and sent in the `X-PAYT-SIGNATURE` header. The secret key can be obtained on the `settings` page of the webhooks, it is shown only once after generating it. If you lose the secret or if it has been compromised a new one can be created on the `settings` page. Note that there may be a short delay before the new secret takes effect for all webhook requests. Due to the asynchronous nature of the webhooks you might receive requests using either the old or new secret for a while. Webhook requests are retried automatically and these retries will pick up the new secret. When all retries are exhausted they can be retried manually. The failed requests can be found on the `settings` page of the corresponding webhook. To verify the signature, take the secret and the body of the request and generate an HMAC hexdigest using the SHA256 method. The generated hash can then be used to safely compare it against the value in the `X-PAYT-SIGNATURE` header. Make sure not to parse the body of the request before generating the hash, it must be calculated on the raw request body as it is received. ```javascript theme={null} const crypto = require("crypto"); // rawBody must be the request body exactly as received, before any JSON parsing function verifySignature(rawBody, signatureHeader, secret) { const expected = crypto .createHmac("sha256", secret) .update(rawBody) .digest("hex"); return crypto.timingSafeEqual( Buffer.from(expected, "hex"), Buffer.from(signatureHeader, "hex") ); } ```