Download OpenAPI specification:Download
In order to use GovWallet API, you are required to generate temporary security credentials, sign your requests and bind the transport security with mTLS. Please use the following information as a guide.
mTLS is the transport layer security mechanism on top of standard HTTPS.
For all endpoints you'll need to sign requests using AWS signature version 4.
Initially, we introduced the endpoint /v2/customer/transactions/get to fetch all transactions for a customer. The results returned by this endpoint are sorted in ascending order by the created date of the transaction by default. All transaction items related to the transaction are also returned in ascending order of their created dates, based on the accountType specified.
However, we have heard concerns from our partners about the challenges posed by this approach. In response, we introduced a new endpoint: /v2/customer/transactions/getByModifiedDate. This endpoint returns transaction items sorted by their modified date in ascending order, making the accountType field in the request body no longer mandatory. This change means you no longer need to call the endpoint twice to fetch transactions for both normal and outflow accounts.
Initially, we introduced the endpoint /v2/transactions/get to fetch all transactions associated with a particular campaign. By default, the results returned by this endpoint are sorted in ascending order by the created date of each transaction. Similarly, all transaction items related to a transaction are returned in ascending order of their created dates.
However, we have heard concerns from our partners about the challenges posed by this approach, especially regarding the need to perform the same backdate query to receive any updated transaction items belonging to a transaction. In response, we introduced a new endpoint: /v2/transactions/getByModifiedDate. This endpoint returns transaction items sorted by their modified date in ascending order by default. Importantly, the request body accepts an optional field "orderBy" that allows users to change the sorting order to descending. This flexibility ensures that you no longer need to repeatedly call the endpoint with the same start and end dates to check for updates to the transaction items associated with a transaction.
customerId required | string Hashed ID of customer |
campaign | string Value: "campaign_abbrv" When omitted, account details for all campaigns will be returned. |
accountType | string Default: "NORMAL" Enum: "NORMAL" "OUTFLOW" |
{- "customerId": "4963CEE2672AC6269243F359DD66B017B5274AB2B43C591BAF571B43A89C57B0",
- "campaign": "campaign_abbrv"
}
{- "customerId": "4963CEE2672AC6269243F359DD66B017B5274AB2B43C591BAF571B43A89C57B0",
- "accountDetails": [
- {
- "accountId": "4963CEE2672AC6269243F359DD66B017B5274AB2B43C591BAF571B43A89C57B0",
- "accountType": "NORMAL",
- "activationStatus": "ACTIVATED",
- "balance": 300,
- "campaign": "campaign_abbrv",
- "category": "credits",
- "created": "2021-04-20T00:00:00.000+08:00",
- "entity": "Customer",
- "modified": "2021-04-20T00:00:00.000+08:00",
- "expiries": [
- {
- "initialAmount": 100,
- "availableAmount": 0,
- "expires": "2021-12-31T23:59:59.999+08:00"
}, - {
- "initialAmount": 100,
- "availableAmount": 100,
- "expires": "2022-12-31T23:59:59.999+08:00"
}, - {
- "initialAmount": 200,
- "availableAmount": 200,
- "expires": "2023-12-31T23:59:59.999+08:00"
}
]
}
]
}
customerId required | string Hashed ID of customer |
campaign required | string Value: "campaign_abbrv" Campaign to perform action on |
startDate | string <date-time> Start date of filter, in ISO8601, Singapore timezone |
endDate | string <date-time> End date of filter, in ISO8601, Singapore timezone |
exclusiveStartKey | string Used for pagination. Provide the value from the response parameter |
orderBy | string Default: "ASC" Enum: "ASC" "DESC" Returns transactions in ascending or descending order of transaction modified date. |
{- "customerId": "4963CEE2672AC6269243F359DD66B017B5274AB2B43C591BAF571B43A89C57B0",
- "campaign": "campaign_abbrv",
- "startDate": "2021-06-17T12:38:47.908+08:00",
- "endDate": "2021-07-17T12:38:47.908+08:00"
}
{- "customerId": "4963CEE2672AC6269243F359DD66B017B5274AB2B43C591BAF571B43A89C57B0",
- "transactions": [ ]
}
campaign required | string Value: "campaign_abbrv" Campaign to perform action on |
startDate required | string <date-time> Start date of filter, in ISO8601, Singapore timezone |
endDate | string <date-time> End date of filter, in ISO8601, Singapore timezone |
exclusiveStartKey | string Used for pagination. Provide the value from the response parameter |
orderBy | string Default: "ASC" Enum: "ASC" "DESC" Returns transactions in ascending or descending order of transaction modified date. |
filterBy | string Enum: "ATM_CREATE" "ATM_COMPLETE" "ATM_COMPLETE_MANUAL" "ATM_CANCEL" "ATM_REFUND_MANUAL" "PAYNOW_CREATE" "PAYNOW_COMPLETE" "PAYNOW_CANCEL" "PAYNOW_FAILURE" "PAYNOW_CREATE_MANUAL" "PAYNOW_COMPLETE_MANUAL" "PAYNOW_CANCEL_MANUAL" "PAYNOW_REFUND_MANUAL" "PAYNOW_REFUND_PARTIAL_MANUAL" "NETS_CREATE" "NETS_COMPLETE" "NETS_CANCEL" "NETS_REFUND" "DISBURSE" "EXPIRE" "CLAWBACK" Filter transactions by type |
{- "campaign": "campaign_abbrv",
- "startDate": "2021-06-17T12:38:47.908+08:00",
- "exclusiveStartKey": "eyJTSyI6ImNhbXBhaWduX2EjY2F0ZWdvcnlfYSNUWE4jMjE1M2N2RmMxZUxZd3JkOXE3bW56VFducjRRIzIiLCJQSyI6IkNVUyNTMDAwMDAwMUkjY2FtcGFpZ25fYSJ9"
}
{- "transactions": [ ]
}
A tranche represents a fixed allocation of credits that must be created first before any disbursement of credits can take place. Each tranche is uniquely identified by a trancheId and is associated with a predetermined credit amount. This structure allows for controlled disbursement, where every customer linked to a specific tranche receives the same fixed amount of credits. All disbursements associated with a given "trancheId" will share the same fixed amount defined by "amountInCents".
trancheId required | string/^[a-zA-Z0-9-]{1,128}$/ Tranche ID to be associate with this disbursement tranche |
campaign required | string Value: "campaign_abbrv" Campaign to perform action on |
amountInCents required | integer Amount in cents |
{- "trancheId": "FY2025-payout",
- "campaign": "campaign_abbrv",
- "amountInCents": 10000
}
{- "message": "Successfully created tranche",
- "trancheId": "FY2025-payout",
- "campaign": "campaign_abbrv",
- "amountInCents": 10000
}
Previously, customer account creation ("/v2/customer/account/create") and disbursement ("/v2/benefactor/disbursement/create") were handled separately. This new disbursement endpoint ("/v2/benefactor/tranche/disburse") simplifies the process by combining both operations into a single step. Account creation and disbursement occur on or after the "validFrom" date. If "validFrom" is specified, the customer account is created only if it doesn't already exist at that time. This endpoint is idempotent, ensuring that credits are never disbursed to the same customer more than once for the same "customerId" and "trancheId", even when "validFrom" defaults to the current time.
customerId required | string Hashed ID of customer |
campaign required | string Value: "campaign_abbrv" Campaign to perform action on |
required | object (Disbursement with tranche details) |
{- "customerId": "4963CEE2672AC6269243F359DD66B017B5274AB2B43C591BAF571B43A89C57B0",
- "campaign": "campaign_abbrv",
- "disbursement": {
- "trancheId": "FY2025-payout",
- "validFrom": "2025-01-01T00:00:00.000+08:00",
- "validTo": "2025-12-31"
}
}
{- "customerId": "4963CEE2672AC6269243F359DD66B017B5274AB2B43C591BAF571B43A89C57B0",
- "campaign": "campaign_abbrv",
- "disbursement": {
- "trancheId": "FY2025-payout",
- "validFrom": "2025-01-01T00:00:00.000+08:00",
- "validTo": "2025-12-31T23:59:59.999+08:00"
}
}