Table of contents

Technical reference documentation

About this reference

The endpoint reference for the Precium Direct Debit (Mandates) API. Interactive documentation and a Postman collection are linked below; the tables on this page are the quick reference.

ResourceLink
Interactive reference — productionapi.revio.co.za/swagger
Interactive reference — sandboxdev.api.revio.co.za/swagger
Postman collectionDebit Order API

Environments

EnvironmentBase URLToken endpoint
Sandboxhttps://dev.api.revio.co.za/https://dev-payce.auth.eu-west-1.amazoncognito.com/oauth2/token
Productionhttps://api.revio.co.za/https://prod-payce.auth.eu-west-1.amazoncognito.com/oauth2/token

Unlike the card APIs, sandbox and production are separate hosts. Credentials are issued per environment and are not interchangeable.

API version

Two versions are served. Build against v2 — 88 operations against v1's 50, and the only version carrying account verification, bulk CSV, DebiCheck amend, poll and reset, settlement and statement data, mandate audit and reporting. v1 remains available for existing integrations and is not being extended.

The version is part of the path, so the two are parallel trees that share no endpoints. Every path below is v2 and is relative to the base URL.

Authentication

OAuth 2.0 client credentials. POST to the token endpoint with HTTP Basic authentication, then send the returned JWT as a bearer token.

curl -X POST https://prod-payce.auth.eu-west-1.amazoncognito.com/oauth2/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -u "$CLIENT_ID:$CLIENT_SECRET" \
  -d "grant_type=client_credentials"
Authorization: Bearer <access_token>

Tokens are valid for 24 hours (expires_in: 86400). Cache and reuse one rather than requesting per call, and refresh on 401.

Mandates

A mandate is the payer's authority to collect. Create one before collecting.

MethodPathPurpose
GET, POST/v2/mandate/debicheckList or create DebiCheck mandates
GET, PUT, PATCH/v2/mandate/debicheck/{mandateId}Retrieve or update a mandate
POST/v2/mandate/debicheck/{mandateId}/authAuthenticate the mandate with the payer
POST/v2/mandate/debicheck/{mandateId}/amendAmend an authenticated mandate
POST/v2/mandate/debicheck/{mandateId}/pollPoll the bank for an authentication result
POST/v2/mandate/debicheck/{mandateId}/resetReset to the previous valid state
GET/v2/mandate/debicheck/{mandateId}/statusLatest status
GET, POST/v2/mandate/eftList or create EFT mandates
GET, PUT, PATCH, DELETE/v2/mandate/eft/{mandateId}Retrieve, update or delete
GET/v2/mandate/eft/{mandateId}/statusLatest status
GET, POST/v2/mandateresultMandate results
GET, POST/v2/mandateauditMandate audit trail
GET, DELETE/v2/mandateaudit/{id}A specific audit record

amend sets requiresAuth internally — do not set it yourself.

Collections

A collection debits a payer under an existing mandate.

MethodPathPurpose
GET, POST/v2/collection/debicheckList or create DebiCheck collections
POST/v2/collection/debicheck/from_mandateCreate from an existing mandate
GET, DELETE/v2/collection/debicheck/{collectionId}Retrieve or cancel
GET/v2/collection/debicheck/{collectionId}/statusLatest status
POST/v2/collection/debicheck/{collectionId}/recreate_as_eftRecreate a failed DebiCheck collection as EFT
GET, POST/v2/collection/eftList or create EFT collections
POST/v2/collection/eft/from_mandateCreate from an existing mandate
GET, DELETE/v2/collection/eft/{collectionId}Retrieve or cancel
GET/v2/collection/eft/{collectionId}/statusLatest status
GET, POST/v2/collectionresultCollection results

Payments

Outbound EFT credits to a bank account.

MethodPathPurpose
GET, POST/v2/payment/eftList or create EFT payments
GET, DELETE/v2/payment/eft/{paymentId}Retrieve or cancel
GET/v2/payment/eft/{paymentId}/statusLatest status

Bulk operations by CSV

Mandates, collections and payments can all be created in bulk. The pattern is identical for each: generate a template, upload it, then download the processed results.

MethodPath patternPurpose
GET/v2/{mandate|collection|payment}/{type}/upload/csv/generate_templateDownload the correct CSV template
POST/v2/{mandate|collection|payment}/{type}/upload/csvSubmit a populated CSV; returns a bulkUploadId
GET/v2/{mandate|collection|payment}/{type}/download/csv/{bulkUploadId}Download the processed results

Always generate the template rather than constructing a CSV by hand — column order and headers are validated on upload.

Account verification

MethodPathPurpose
POST/v2/accountverification/validateValidate a bank account's structure
POST/v2/accountverification/verifyVerify the account exists and matches the holder

Verify before creating a mandate. An unverifiable account produces a mandate that will fail at collection.

Profiles

MethodPathPurpose
GET/v2/merchantprofileList merchant profiles
GET/v2/merchantprofile/{id}A specific merchant profile
GET/v2/clientprofileList client profiles
GET/v2/clientprofile/{id}A specific client profile

GET /v2/merchantprofile is the simplest call to confirm a token works.

Callbacks

Register the URL you want events delivered to, then use the test endpoints to confirm your handler before going live.

MethodPathPurpose
GET, POST/v2/clientcallbackurlList or register your callback URL
GET, PUT, DELETE/v2/clientcallbackurl/{id}Retrieve, update or remove a registration
POST/v2/callback/test/mandate/debicheck/{mandateId}Trigger a test mandate callback
POST/v2/callback/test/collection/debicheck/{collectionId}Trigger a test DebiCheck collection callback
POST/v2/callback/test/collection/eft/{collectionId}Trigger a test EFT collection callback
POST/v2/callback/test/payment/eft/{paymentId}Trigger a test EFT payment callback
POST/v2/callback/test/settlement/{settlementId}Trigger a test settlement callback

This API does not sign its callbacks. There is no signature header and no public key, so a callback cannot be authenticated from its content alone. Treat every callback as an untrusted notification: use it as a prompt to re-read the authoritative state from the relevant /status endpoint, and never act on the payload's values directly. This differs from the card APIs, which do sign callbacks — do not carry that assumption across.

Events

Polling alternatives to callbacks, each ordered by time so you can resume from where you left off.

MethodPathPurpose
GET/v2/event/mandateMandate events
GET/v2/event/collectionCollection events
GET/v2/event/paymentPayment events
GET/v2/event/profileProfile events

Because callbacks are unsigned, the event endpoints are the more trustworthy basis for reconciliation.

Settlement and reporting

MethodPathPurpose
GET/v2/reportingReports per profile
GET/v2/transactionfileList transaction files
GET/v2/transactionfile/{id}A specific transaction file
GET/v2/bankaccountstatement/{bankAccountNumber}Statements for an account
GET/v2/bankaccountstatement/{bankAccountNumber}/{id}A specific statement
GET/v2/bankaccountmarkoffMark-off details
GET/v2/bankaccountsettlement/config/{configId}/executeSettlement executions for a configuration

Conventions

TopicBehaviour
AuthenticationBearer JWT from Cognito; 24-hour validity; refresh on 401
EnvironmentsSeparate hosts and separate credentials for sandbox and production
VersionIn the path. Build against /v2/
StatusEvery object type exposes a /status endpoint — the authoritative source
CallbacksUnsigned. Use as a prompt to re-read state, not as a source of truth
BulkGenerate template → upload → download results, keyed by bulkUploadId

Status codes

CodeMeaning
200 / 201Success / created
400Validation error — check the response body for the failing field
401Token missing, malformed or expired. Request a new one
403Token valid but not permitted for this profile
404Not found, or the wrong API version in the path
500Server error. Safe to retry reads

Response codes specific to mandates and collections are in Response codes; diagnostics are in Troubleshooting.