Get started
This guide shows everything required to run Transfer SNS end to end for Wave.
By the end of this guide, you will have:
- Environment access and credentials
- A configured webhook endpoint
- An
activeExternal Account (Recipient) to use as transfer destination - A working
POST /v1/transfer/snsflow
1. Prepare access
- Sign in to your Gravv Dashboard.
- Confirm access to your production API credentials.
- Add your outbound IPs to the allowlist (Manage → Configure → IP Access List) if your tenant enforces IP restrictions.
For environment URLs and mode separation, see Environments.
2. Obtain API credentials
- In Dashboard, open Manage → Configure → API Keys.
- Copy your server-side secret key.
- Use it as
Api-Keyon API requests. - Generate a unique
Idempotency-Keyper transfer request. - Copy your
customer_idfrom the same Manage → API Keys section for transfer payloads that require it.
For request header details, see Authentication.
3. Configure webhooks
Transfer SNS is asynchronous. Final outcomes are delivered by webhook events.
- In Dashboard, open Webhooks.
- Create your webhook endpoint URL.
- Generate and store your webhook secret key.
- Implement signature verification before processing payloads.
For payload format and verification, see Webhooks.
4. Create an External Account (Recipient) destination
Create an External Account (Recipient) with POST /v1/external-accounts. Supported payout destination types are:
bank_accountmobile_money
Depending on your tenant approval policy, a newly created External Account (Recipient) can be parked in waiting_approval until maker-checker approval is completed. An External Account (Recipient) can only be used for Transfer SNS when its status is active.
5. Confirm source account
POST /v1/transfer/sns requires source.id (internal account) and destination.id (External Account/Recipient).
Use the source account provisioned for your business by Gravv. If you do not have it, request it from your Gravv onboarding/contact team.
6. Initiate Transfer SNS
Send POST /v1/transfer/sns with:
source.source_type = internal_accountsource.id = <your source account id>destination.destination_type = external_accountdestination.id = <active external account recipient id>amountas a decimal string (for example"100.00")Api-KeyandIdempotency-Keyrequest headers
The request returns an accepted transfer record (reference, transfer_status), then webhook events drive the final lifecycle.
See Transfer SNS guide for full request/response and lifecycle behavior.