Skip to main content
POST
/
v2
/
statements
Statements
curl --request POST \
  --url https://api.sandbox.pawapay.io/v2/statements \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "wallet": {
    "country": "ZMB",
    "currency": "ZMW",
    "provider": "MTN_MOMO_ZMB"
  },
  "callbackUrl": "https://merchant.com/statementCallbacks",
  "startDate": "2025-05-10T10:00:00",
  "endDate": "2025-05-11T10:00:00"
}'
{
"statementId": "f4401bd2-1568-4140-bf2d-eb77d2b2b639",
"status": "ACCEPTED",
"created": "2025-10-19T11:17:01Z"
}
The statements endpoint allows you to generate a financial statement for a wallet. The statement can be downloaded as a gzipped CSV file. Learn more about statements from our Dashboard docs.
  • Each wallet is defined by its country and currency.
  • If you have provider specific wallet, also specify the provider for the wallet.
  • The date range must not exceed 31 days per statement.
  • The gzipped CSV statement can be downloaded from the downloadUrl.
  • The downloadUrl expires after 1 day.
  • Statement data for the may be up to 60 minutes behind the latest transactions.
  • Since the request can be rejected, you must check the status code in the response for each submitted request. The failureReason in the response will contain information about the reason of the rejection.
Each request can get one of the statuses on initiation:
StatusDescription
ACCEPTEDYesThe statement has been accepted by pawaPay for generation.
REJECTEDNoThe statement has been rejected. See failureReason for details.

How to know which wallets i have?

You can find all your wallets with their balances from the Wallet Balances endpoint. You can iterate over all of them and use the country and currency from the response as parameters for your request. If the response includes a not empty provider, it should be passed into the request as well to generate a provider specific wallets statement.

How to find out the final status of this statement?

As the pawaPay Merchant API is an asynchronous API, you can find out the final status of the ACCEPTED statement by either:

Authorizations

Authorization
string
header
required

Body

application/json
wallet
object
required

Specifies which wallet to generate a statement for.

You can check which wallets you have from the wallet balances endpoint.

callbackUrl
string
required

The URL where pawaPay will POST a callback with the downloadUrl when the statement has been generated.

Example:

"https://merchant.com/statementCallbacks"

startDate
string<date-time>
required

The start date of the statement date range. Format defined by 'date-time' in RFC3339 section 5.6 from IETF

Example:

"2025-05-10T10:00:00"

endDate
string<date-time>
required

The end date of the statement date range. Format defined by 'date-time' in RFC3339 section 5.6 from IETF

Example:

"2025-05-11T10:00:00"

Response

Request has been accepted for processing by pawaPay

status
enum<string>
required

The initiation status of the statement:

  • ACCEPTED - The statement has been accepted by pawaPay for generation.
  • REJECTED - The statement request has been rejected by pawaPay. See failureReason for details.
Available options:
ACCEPTED,
REJECTED
statementId
string<uuid>

The unique ID for this statement as specified by pawaPay.

Required string length: 36
Example:

"f4401bd2-1568-4140-bf2d-eb77d2b2b639"

created
string<date-time>

The timestamp of when the statement was created in the pawaPay platform. Format defined by 'date-time' in RFC3339 section 5.6 from IETF

Example:

"2020-02-21T17:32:29Z"

failureReason
object