Payroll Requests

Shared: Payroll Request Object

The object returned by create / get / accept / cancel, and in each item of the list response:

{
  "id": "babe5f2d-7c44-4b83-90b9-f94856ed4643",
  "sourceAccountCurrencyId": "385dec3a-9bfe-4072-8733-7872ef350e71",
  "sourceAccountCurrency": {
    "id": "385dec3a-9bfe-4072-8733-7872ef350e71",
    "balance": "50000.00",
    "available": "44154.68",
    "currency": {
      "currencyCode": "AED",
      "currencyName": "United Arab Emirates Dirham",
      "currencySymbol": "د.إ"
    }
  },
  "payrollAccountCurrencyId": "fae535c5-f64f-4737-82de-c12b88be0764",
  "payrollAccountCurrency": {
    "id": "fae535c5-f64f-4737-82de-c12b88be0764",
    "currency": { "currencyCode": "PKR", "currencyName": "Pakistani Rupee" }
  },
  "totalAmount": "5845.32",
  "status": "QUOTE_PROVIDED",
  "estimatedFxRate": "91.2450",
  "estimatedReceivedAmount": "457892.50",
  "quoteExpiresAt": "2026-07-23T12:39:56.000Z",
  "acceptedByCustomerAt": null,
  "cancellationReason": null,
  "failureReason": null,
  "sourceAmountForExchange": "5730.12",
  "metadata": {
    "feeBreakdown": {
      "sourceCurrencyAmount": "5000.00",
      "spreadFee": "75.00",
      "fuseFee": "40.20",
      "mcbFee": "730.12",
      "totalFee": "845.32",
      "estimatedReceivedAmount": "457892.50",
      "payrollCurrencyCode": "PKR",
      "feeCurrencyCode": "AED",
      "exchangeRate": "91.2450",
      "baseRate": "92.6210"
    }
  },
  "amountSplitDetails": [
    {
      "id": "d3c2b1a0-9f8e-7d6c-5b4a-3f2e1d0c9b8a",
      "payrollRequestId": "babe5f2d-7c44-4b83-90b9-f94856ed4643",
      "beneficiaryId": "5b9d9177-2261-458d-b65b-c6722cc75a90",
      "beneficiarySnapshot": {
        "id": "5b9d9177-2261-458d-b65b-c6722cc75a90",
        "firstName": "Ahmed",
        "lastName": "Khan",
        "displayName": "Ahmed Khan",
        "type": "INDIVIDUAL",
        "iban": "PK36MUCB0000001234567890",
        "bankName": "MCB Bank"
      },
      "sourceCurrencyAmount": "5000.00",
      "amount": "456062.50",
      "purposeCode": "FCISS",
      "payoutTransferId": "e4d3c2b1-0a9f-8e7d-6c5b-4a3f2e1d0c9b",
      "createdAt": "2026-07-23T12:34:56.000Z",
      "updatedAt": "2026-07-23T12:34:56.000Z"
    }
  ],
  "transfers": [],
  "createdAt": "2026-07-23T12:34:56.000Z",
  "updatedAt": "2026-07-23T12:34:56.000Z"
}

status is one of: PENDING, QUOTE_PROVIDED, QUOTE_ACCEPTED, EXECUTING, PAYOUT_INITIATED, COMPLETED, PARTIALLY_COMPLETED, FAILED, CANCELLED.

estimatedReceivedAmount and sourceAmountForExchange are derived from metadata.feeBreakdown and appear once a fee breakdown is present on the request.


Create Payroll Request

Creates a payroll request from a previously estimated feeHash. Funds are debited from the source account and the request enters PENDING awaiting a quote. Recorded as a partner action in the customer’s audit log.

Request

Method:   POST
URL:      /v1/client/:customerId/payroll/requests
Auth:     PARTNER | PARTNER_ADMIN

Path Parameters

Parameter Type Required Description
customerId string (UUID) Yes ID of the customer. Must be linked to the authenticated partner.

Body Parameters

Parameter Type Required Description
sourceAccountCurrencyId string (UUID) Yes Must match the estimate behind feeHash.
payrollAccountCurrencyId string (UUID) Yes Must match the estimate behind feeHash.
feeHash string Yes Hash returned by the fee estimate; must be unexpired and unused.
amountSplitDetails array Yes Per-beneficiary splits.
amountSplitDetails[].beneficiaryId string (UUID) Yes Beneficiary receiving this portion.
amountSplitDetails[].amount string (decimal) Yes Amount, > 0.
amountSplitDetails[].purpose string Yes Valid MCB purpose code.
amountSplitDetails[].amountCurrencyType string No SOURCE (default) or PAYROLL.

Example Request

{
  "sourceAccountCurrencyId": "385dec3a-9bfe-4072-8733-7872ef350e71",
  "payrollAccountCurrencyId": "fae535c5-f64f-4737-82de-c12b88be0764",
  "feeHash": "a7c8f3d2-4b9e-4d1a-8f2c-9e7d6c5b4a3f",
  "amountSplitDetails": [
    { "beneficiaryId": "5b9d9177-2261-458d-b65b-c6722cc75a90", "amount": "5000.00", "purpose": "FCISS" },
    { "beneficiaryId": "0db9b611-9754-454d-951d-d691e1265148", "amount": "150000.00", "purpose": "PEN", "amountCurrencyType": "PAYROLL" }
  ]
}

Response

Status: 201 Created

Returns the payroll request object with status PENDING.

{ "success": true, "data": { "...payroll request object..." } }

Invalid input or an expired/mismatched feeHash returns 400; an unowned customer returns 403.


List Payroll Requests

Returns a paginated list of the customer’s payroll requests, most recent first by default.

Request

Method:   GET
URL:      /v1/client/:customerId/payroll/requests
Auth:     PARTNER | PARTNER_ADMIN

Path Parameters

Parameter Type Required Description
customerId string (UUID) Yes ID of the customer. Must be linked to the authenticated partner.

Query Parameters

Parameter Type Required Description
status string No Filter by PayrollRequestStatus.
startDate string (date-time) No Filter by created-at lower bound.
endDate string (date-time) No Filter by created-at upper bound.
page integer No Page number. Default 1.
limit integer No Page size. Default 20.
sort string No asc or desc. Default desc.

Response

Status: 200 OK
{
  "success": true,
  "data": [ { "...payroll request object..." } ],
  "pagination": { "page": 1, "limit": 20, "total": 1, "totalPages": 1 }
}

Get Payroll Request by ID

Returns a single payroll request owned by the customer, including its amount splits and transfers.

Request

Method:   GET
URL:      /v1/client/:customerId/payroll/requests/:requestId
Auth:     PARTNER | PARTNER_ADMIN

Path Parameters

Parameter Type Required Description
customerId string (UUID) Yes ID of the customer. Must be linked to the authenticated partner.
requestId string (UUID) Yes ID of the payroll request.

Response

Status: 200 OK
{ "success": true, "data": { "...payroll request object..." } }

A request that does not exist or does not belong to the customer returns 404 Not Found.


Accept Payroll Quote

Accepts the quote on a payroll request in QUOTE_PROVIDED status, moving it toward execution. Recorded as a partner action in the customer’s audit log.

Request

Method:   PATCH
URL:      /v1/client/:customerId/payroll/requests/:requestId/accept
Auth:     PARTNER | PARTNER_ADMIN

Path Parameters

Parameter Type Required Description
customerId string (UUID) Yes ID of the customer. Must be linked to the authenticated partner.
requestId string (UUID) Yes ID of the payroll request.

Response

Status: 200 OK

Returns the payroll request object with status QUOTE_ACCEPTED.

{ "success": true, "data": { "...payroll request object (status QUOTE_ACCEPTED)..." } }

An invalid status transition or an expired quote returns 400.


Cancel Payroll Request

Cancels a payroll request that has not yet been executed. Recorded as a partner action in the customer’s audit log.

Request

Method:   DELETE
URL:      /v1/client/:customerId/payroll/requests/:requestId
Auth:     PARTNER | PARTNER_ADMIN

Path Parameters

Parameter Type Required Description
customerId string (UUID) Yes ID of the customer. Must be linked to the authenticated partner.
requestId string (UUID) Yes ID of the payroll request.

Body Parameters

Parameter Type Required Description
cancellationReason string No Optional free-text reason stored on the request.

Response

Status: 200 OK

Returns the payroll request object with status CANCELLED.

{ "success": true, "data": { "...payroll request object (status CANCELLED)..." } }

Cancelling a request that is already executing or completed returns 400.


Copyright © 2025 Relm