End-to-End Payments

Run a direct own-funds payout flow using the merged Login, Wallet, Beneficiary, and Exchange services, then track final state safely.

End-to-End Payment Journey

[!NOTE] Who is this for? This guide demonstrates the standard Direct Integration (1st-Party / Own Funds) flow. If you are an Atlas platform partner executing payments on behalf of sub-accounts, use the platform-specific sub-account and payout guides instead.

Use this flow when you need to fund a payout from your own wallet, create or validate a beneficiary, convert currency if required, and track the payment through to its final state.

✅ Before you start

Complete these steps before you run the payment flow:

  1. Authenticate with the merged Login service and store the returned token and companyId.
  2. Make sure the source wallet exists and has enough availableBalance.
  3. Gather the beneficiary bank or stablecoin wallet details for the target corridor.
  4. Decide whether the payment needs FX conversion before payout.
  5. Register a webhook endpoint so you can track final payout or FX state changes.
  6. Generate a unique paymentId or idempotency key for write requests.

Use Environments to configure the service-specific sandbox hosts for Login, Wallet, Beneficiary, Exchange, and Onboarding.

📚 Use this page with the recipe

This guide explains when to use the direct payout flow and the minimum sequence. For the full implementation walkthrough, use the recipe:

End-to-End Payment Flow Recipe →

🛣️ The Execution Fork (B2B vs. C2B)

Depending on your payout destination, Verto routes funds differently:

TrajectoryEntity TypeData RequirementsSpeed
B2B (Business-to-Business)Paying a supplier or corporate vendor.Requires Company Registration numbers and complete corporate addresses.Standard SWIFT/Local timelines.
C2B/C2C (Consumer Payouts)Paying a contractor, freelancer, or gig worker.Requires personal ID (National ID/Passport) data in certain high-risk corridors.Often eligible for Instant Rails (e.g., M-Pesa, FPS).
sequenceDiagram
    participant A as Your App
    participant V as Verto API
    participant B as Bank Rail

    A->>V: 1. Login and store token + companyId
    V-->>A: token, companyId
    A->>V: 2. Create or fetch beneficiary
    V-->>A: beneficiary id + verificationState
    A->>V: 3. Get FX rate when conversion is required
    V-->>A: rate + vfx_token
    A->>V: 4. Create FX trade or payout
    V-->>A: paymentId + trade reference
    V->>B: Dispatch Funds
    B-->>V: Status: COMPLETED
    V-->>A: 5. Webhook or status update

The direct payout workflow

This use case follows a simple sequence:

  1. Authenticate with Login, then store token and companyId.
  2. Confirm the source wallet with Get all Wallets or create one with Create wallet.
  3. Create or fetch the beneficiary with Create beneficiary or Fetch beneficiary by ID.
  4. Check beneficiary readiness before payout selection.
  5. Fetch the FX rate with Get FX rate if the payout currency differs from the source wallet currency.
  6. Create the FX trade or payout with Create FX trade before the vfx_token expires.
  7. Track final state through webhooks and, for FX-backed payouts, Get FX trade details.

Check these beneficiary readiness fields before you move funds:

FieldWhat to check
verificationStateUse approved beneficiaries for payment flows.
isAccountActiveDo not use inactive beneficiary accounts.
isArchivedDo not show archived beneficiaries for selection.
isUpdateRequiredRoute beneficiaries needing updates into remediation before payout.
paymentModeConfirm the beneficiary supports the payout route you need.

What makes this use case different?

Unlike the platform payout flows, this guide is for direct integrations where:

  • you operate from your own wallet context
  • you do not need X-Sub-Account-Id to scope the transaction
  • beneficiary creation, FX conversion, and payout all happen under your primary integration identity
  • company-scoped wallet calls use the companyId returned by login

Where to go deeper

Use the product guides when you need implementation detail for a specific step:

Success indicators

Status or fieldMeaning
paymentIdYour unique request identifier for duplicate prevention and reconciliation.
referenceVerto FX trade reference returned after trade creation.
stateCurrent FX trade or payout state.
inwardSettlementTimeTime when source-side settlement occurred.
outwardSettlementTimeTime when destination-side settlement occurred.

Only mark the payment as final in your application when the webhook-driven state or retrieved trade status reaches the completed outcome your business logic requires.

Troubleshooting

IssueWhat to check
Beneficiary creation failsVerify the routing fields, stablecoin wallet details, currency, and country data for the payout corridor.
Beneficiary cannot be usedCheck verificationState, isAccountActive, isArchived, and isUpdateRequired.
Conversion cannot be bookedConfirm the vfx_token is still valid and the source wallet has enough availableBalance.
Payout request times outReconcile using the original paymentId or idempotency key before retrying with a new identifier.
Payment stays in an intermediate stateCheck webhook deliveries and confirm whether compliance review, RFI handling, or route-specific settlement timing is delaying completion.

Next steps

Sub-Accounts →
See the platform pattern for isolated downstream customer ledgers and receiving details.
Handle RFIs and Compliance Exceptions →
Pause review-blocked payments safely and avoid duplicate retries.