Webhooks

Payment job events

A bulk (partner API) job fires these when ingestion finishes. Both are emitted together and can arrive out of order: collect result pages by jobId + pageNumber, and use completed.resultPageCount to know when every page has arrived. Follow each transactionId into the transaction.* events for lifecycle. Signing, retries, and headers are covered under Platform → Register Webhook.

Envelope
{
  "id": "<eventId>",
  "type": "payment.job.completed",
  "created": 1785400200000,
  "data": { "object": { /* the job event object, shown below per event */ } }
}

Events

payment.job.result_page

The data: per-transaction ingestion outcomes, paginated at 250 records per page.

payment.job.result_page
{
  "id": "payment-job:550e8400-e29b-41d4-a716-446655440000:result-page:1:v1",
  "type": "payment.job.result_page",
  "created": 1785400200000,
  "data": {
    "object": {
      "object": "payment_job.result_page",
      "jobId": "550e8400-e29b-41d4-a716-446655440000",
      "apiRefNumber": "PAYROLL-JUL-2026",
      "idempotencyKey": "payroll-jul-key-01",
      "initiatedByUserId": "svc-user-1",
      "status": "completed_partial",
      "completedAt": 1785400200000,
      "pageNumber": 1,
      "pageSize": 250,
      "pageCount": 1,
      "totalRecords": 2,
      "records": [
        {
          "transactionId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
          "transactionReference": "SAL-EMP-001",
          "amount": {
            "value": 5000000,
            "currency": "INR"
          },
          "outcome": "accepted",
          "rejectionCode": null,
          "rejectionMessage": null
        },
        {
          "transactionId": "6ba7b810-9dad-11d1-80b4-00c04fd430c9",
          "transactionReference": "SAL-EMP-002",
          "amount": null,
          "outcome": "rejected",
          "rejectionCode": "validation_error",
          "rejectionMessage": "The payment row failed validation."
        }
      ]
    }
  }
}
Notes

One or more per job (ceil(totalRecords / 250)). Each record: transactionId, transactionReference, amount, outcome, rejectionCode, rejectionMessage. Collect pages by jobId + pageNumber; dedupe on the event id. Follow each transactionId into transaction.* events for lifecycle.