Skip to content

Payroll

Standard payroll supports NOK-to-NOK transactions within Norway. Use cross-border payments for recipients outside Norway.

The standard product is a Norway-only NOK to NOK payroll flow.

All salaries are submitted in one payroll request. The user’s bank sends one funding payment to the ZTL client account, after which ZTL pays the individual recipients. Until funds leave the source account, transactions effectively share a state; afterward, each recipient can have a different outcome.

  1. Confirm PAYROLL support, then create with POST /api/v2/payroll.
  2. Store payrollId and each transaction’s end-to-end ID.
  3. Start approval with POST /api/v2/payroll/approve and present the returned SCA.
  4. Poll GET /api/v2/payroll/{payrollId}/status.
  5. Evaluate every transaction rather than inferring all results from one.
  6. Offer cancellation only while the payroll remains eligible; complete any returned cancellation SCA and poll again.

Payroll creation, approval, SCA, overall and transaction polling, and cancellation

The diagram is supplemental; the steps and tables describe the same flow.

If the due date is today, or tomorrow when creating after 16:00, warn the user when the available balance is lower than the payroll total. This helps prevent delayed or cancelled salaries.

Status Final Meaning
Unsigned No The bank still requires approval.
InProgress No The funding or payout process is ongoing. Continue polling.
CustomerActionRequired No The user must act; inspect the status reason.
Completed Yes The recipient’s salary was paid.
Rejected Yes That transaction was rejected.
Cancelled Yes That transaction was cancelled.

InProgress deliberately spans several stages: bank approval, funds arriving in the ZTL client account, and funds leaving that account but not yet reaching the recipient. Do not display it as proof that the recipient has been paid.

Status reasons use the same handling concepts as payments:

  • PartlySigned: another authorized signer is required;
  • SmsConfirmationRequired: the user must complete the bank’s SMS step; and
  • InsufficientFunds: the bank stopped the payment because funds were insufficient.

Only non-final payrolls can be candidates for cancellation, and an InProgress payroll may already be too far advanced once money has left the source account. Call POST /api/v2/payroll/cancel and rely on its response rather than inferring eligibility. A bank can require SCA, especially after approval. Poll all transaction statuses after the attempt.

The bulk payroll operations are a restricted special flow for Danske Bank. They must not be used without coordinating enablement with ZTL. When enabled, store the bulk ID and poll GET /api/v2/payroll/bulk/{bulkId}/status.

Keep this separate from standard payroll; support in a country or the presence of PAYROLL alone does not authorize the bulk operation.

See the Payroll API reference for exact request and response schemas.