Payroll initiation
curl --request POST \ --url https://api.ztlpay.io/api/v2/payroll \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'PSU-IP-Address: 192.158.1.38' \ --header 'PSU-User-Agent: Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/63.0' \ --header 'consent-id: 3a797348-ef0c-4f52-b821-fdfcdb98c4d9' \ --data '{ "from": { "account": { "bban": 97105048304 }, "name": "ZTL Payment Solution AS", "organizationNumber": 920970931 }, "transactions": [ { "metadata": { "endToEndId": "71a2e752-8b71-446f-b9e9-b19bfb70becb" }, "name": "Ola Nordmann", "account": { "bban": 97105048304 }, "amount": { "amount": "1000.50", "currency": "NOK" }, "remittanceInformation": { "type": "message", "value": "Payment for invoice 12345" } } ], "dueDate": "2024-01-15", "purposeCode": "SALA" }'Initiates a new payroll, and returns a status for successful requests.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Header Parameters
Section titled “Header Parameters”Example
3a797348-ef0c-4f52-b821-fdfcdb98c4d9A valid consentId
Example
192.158.1.38AAA IP Address of the end-user initiating the payment. DO NOT use any other IP address than what you can collect from the current user session that uses your system (don’t use something stored in your DB). This information is used by the banks to manage traffic and handle security.
The forwarded Agent header field of the HTTP request between PSU and TPP.
Example
Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/63.0Request Body
Section titled “Request Body”object
Account information for debtor
object
object
A valid bban from one of the accounts on the consent.
Example
97105048304The name of the organization making the payroll
Example
ZTL Payment Solution ASOrganization number for the company
Example
920970931A List of transactions for each individual payout in the payroll
object
Metadata for a single transaction
object
Identifier for the single transaction
Example
71a2e752-8b71-446f-b9e9-b19bfb70becbThe name of the receiver
Example
Ola NordmannA receiver account
object
A valid bban from one of the accounts on the consent.
Example
97105048304Amount and currency to be paid
object
Amount to be paid
Example
1000.50The currency the amount is specified in
Example
NOKRemittance information, either OCR or Text message
RemittanceInformationMessageText message, will be visible to receiver. Typically order number or description for payrollRemittanceInformationOcrOCR must be used if the receiving account is OCR account.
object
Message for receiver
Example
Payment for invoice 12345Remittance information, either OCR or Text message
RemittanceInformationMessageText message, will be visible to receiver. Typically order number or description for payrollRemittanceInformationOcrOCR must be used if the receiving account is OCR account.
object
Please use ‘ocr’, ‘kid’ are deprecated
Example
24646The due date for the payroll
Example
2024-01-15Purpose code for payroll
Responses
Section titled “Responses”Payroll initiated successfully
object
Used for approval, cancellation, and status check
Unsigned will be the status unless the account has some other rules
object
Same identifier as when creating a transaction
The timestamp of the most recent internal update to the payroll status.
UnsignedThe user must approve the payroll.InProgressThe transaction is ongoing.CompletedThe transaction/salary has been paid out.RejectedThe transaction has been rejected.CancelledThe transaction has been cancelled.CustomerActionRequiredThe payroll requires further action from the user.
PartlySignedIndicates that the payments needs additional signing. This requirement may be set up for the bank account.SmsConfirmationRequiredThe user needs additional confirmation with responding SMS received. Only used by a few banksInsufficientFundsThe payment has been stopped by the bank due to lack of funds
Example
{ "payrollId": "7c628b2e-9094-4bf8-af23-1d517c6fc4f5", "transactions": [ { "timestamp": "2025-12-30 06:43:45.569610 +00:00", "payrollStatus": "Unsigned", "payrollStatusReason": "PartlySigned" } ]}Bad Request
object
INVALID_CONSENTConsent is invalidAUTHENTICATION_TEMPORARY_UNAVAILABLEAuthentication service is temporary unavailable, most likely due to user already has started another concurrent authentication processUNSUPPORTED_PRODUCT_BY_BANKProduct is not supported by bankINVALID_OCROCR is either missing or invalid, or invalid OCR agreementACCESS_DENIEDPSU does not have access to resource. Ensure debtorAccount is correct and user have payment access to account.
Unique RequestId, please provide this Id in case of support requests
The underlying reason for the error
Example
{ "failure": "INVALID_CONSENT", "ztlRequestId": "3a797348-ef0c-4f52-b821-fdfcdb98c4d9", "message": "Invalid Bban"}Forbidden
object
Unique RequestId, please provide this Id in case of support requests
The underlying reason for the error
Example
{ "ztlRequestId": "3a797348-ef0c-4f52-b821-fdfcdb98c4d9", "message": "Invalid account"}Headers
Section titled “Headers”Unique RequestId, please provide this Id in case of support requests
Example
3a797348-ef0c-4f52-b821-fdfcdb98c4d9Conflict
object
Unique RequestId, please provide this Id in case of support requests
The underlying reason for the error
Example
{ "ztlRequestId": "3a797348-ef0c-4f52-b821-fdfcdb98c4d9", "message": "Invalid account"}Headers
Section titled “Headers”Unique RequestId, please provide this Id in case of support requests
Example
3a797348-ef0c-4f52-b821-fdfcdb98c4d9Input validation fails
object
The error code
The underlying reason for the error
Path from request body where the validation failed
Example
[ { "code": "InvalidDueDate", "reason": "Due date cannot be in the past", "path": ".dueDate" }]Internal server error
object
Unique RequestId, please provide this Id in case of support requests
The underlying reason for the error
Example
{ "ztlRequestId": "3a797348-ef0c-4f52-b821-fdfcdb98c4d9", "message": "Invalid account"}Headers
Section titled “Headers”Unique RequestId, please provide this Id in case of support requests
Example
3a797348-ef0c-4f52-b821-fdfcdb98c4d9Service unavailable
object
Unique RequestId, please provide this Id in case of support requests
The underlying reason for the error
Example
{ "ztlRequestId": "3a797348-ef0c-4f52-b821-fdfcdb98c4d9", "message": "Invalid account"}Headers
Section titled “Headers”Unique RequestId, please provide this Id in case of support requests
Example
3a797348-ef0c-4f52-b821-fdfcdb98c4d9