Skip to content
Last updated

Percents sends omni-txn-stream-result to the issuer webhook URL after a file reaches a final processing state.

Timing

The webhook is intentionally not sent until required automated processing and human oversight are complete. Files are worked regularly, but delivery does not follow a fixed schedule or guaranteed number of hours.

If no result arrives within three business days of a successful storage upload, contact Percents with the filename, environment, issuer, upload time, and time zone.

Envelope

{
  "webhookId": "evt_77777777-7777-4777-8777-777777777777",
  "type": "omni-txn-stream-result",
  "data": {
    "rejections": 2,
    "detectedTxns": 100,
    "successfullyProcessedTxns": 98,
    "pendingFurtherReview": 0,
    "filename": "transactions-2026-08-10.json",
    "schemaValidationSuccess": true,
    "schemaValidationError": null
  }
}

Result interpretation

FieldMeaning
rejectionsFinal rejected transaction count, or null when schema validation failed
detectedTxnsTransactions detected in the uploaded file, or null on schema failure
successfullyProcessedTxnsTransactions that completed processing successfully
pendingFurtherReviewTransactions still awaiting review; final result webhooks normally report 0
filenameFilename supplied during presign, used for reconciliation
schemaValidationSuccessWhether the file parsed and satisfied the expected content schema
schemaValidationErrorSafe schema error description, or null on success

Receiver behavior

  1. Read and retain the raw request body.
  2. Verify X-PERCENTS-SIGNATURE before trusting the payload.
  3. Deduplicate by webhookId.
  4. Durably record the result and return 2xx quickly.
  5. Reconcile the counts and filename to the submitted batch asynchronously.

Percents retries unsuccessful webhook delivery with increasing delays. A receiver must be idempotent because the same webhookId can be delivered more than once.