Plexy
Pay APIGate APIDashboard
Pay APIGate APIDashboard
  1. API
  • Overview
  • Authorization
  • Webhooks
  • API Errors
  • Test Scenarios
  • Ecommerce Plugins
  • API
    • Payments
      • Overview
      • Payment Links
        • Create Payment Link
        • List Payment Links
        • Retrieve Payment Link by Order Reference
        • Cancel Payment Link
        • Retrieve Payment Link
        • Update Payment Link Expiration
        • Retrieve Payment Links Statistics
      • Reccurent Payments
        • Create Merchant-Initiated Payment
      • Direct Payments
        • Get Keys
        • Create Host-to-Host Payment
      • Transaction Management
        • Find Transaction's History by ID
        • Find Transaction by Payment Link ID
        • Find Transaction by ID
        • Find Transaction by Order reference
      • Payment Management
        • Cancel Payment
        • Capture Payment
        • Process Refund
      • Split Requests
        • Create
        • List
        • Update
        • Get By Id
        • Delete
      • Settlement Payment Order
        • Create
        • Get by id
        • List
    • Payouts
      • Retrieve Payout Transactions
      • Process Payout
      • Save Card for Payouts
    • Customers
      • Get Customer's Card Tokens
      • List Customers
      • Create Customer
      • Get Customer by ID
      • Get Customer's Transactions
    • Merchants
      • Payment Beneficiary
        • Create
        • Update
        • Gey By Id
        • List
        • Transfer from beneficiary balance to merchant balance
        • Create manual settlement for beneficiary
      • Retrieve Merchant's Details
  • Client SDK
    • Server flow
      • Advanced server flow
      • Session server flow
    • Web
      • Web Drop-in
      • Web Components
    • Flutter
      • Flutter Drop-in
      • Flutter Components
  • Schemas
    • Schemas
      • response.TransactionList
      • entity.SplitRequest
      • entity.PaymentBeneficiary
      • request.CreatePaymentBeneficiary
      • entity.SettlementPaymentOrder
      • entity.PayoutRequest
      • entity.PayoutRequestRowData
      • command.HandleThreeDResult
      • domain.Report
      • entity.CardSaveSessionCustomer
      • entity.Permission
      • entity.UserProfile
      • entity.UserRole
      • errors.Message
      • errors.Source
      • errors.Type
      • git_plexypay_com_ecom_back_api_internal_domain_view.Page-domain_Report
      • git_plexypay_com_ecom_back_api_internal_domain_view.Page-entity_UserProfile
      • git_plexypay_com_ecom_back_api_internal_platform_errors.Code
      • models.CSVApiRequest
      • models.CreateBussinessDetails
      • models.KeyResponse
      • models.OnboardingRequest
      • models.Transaction
      • paymentcore.Address
      • paymentcore.CustomerDetails
      • request.AuthorizePayment
      • request.BrowserDetails
      • request.CardData
      • request.ChangeUserRole
      • request.ContinueThreeDS
      • request.CreateCardSaveSession
      • request.CreateInviteSession
      • request.CreatePaymentLink
      • request.CreatePaymentLinkMetadata
      • request.HandlePayout
      • request.MerchantInitiatedPayment
      • request.PasswordRequest
      • request.Recurring
      • request.RefundPayment
      • request.SaveCard
      • request.SaveOneCustomer
      • request.TwoStepAuthorizePayment
      • request.UpdateMerchantSettingsRequest
      • request.UpdatePaymentLink
      • response.AcquirerResponseThreeDSecure
      • response.AuthorizeAndCapturePayment
      • response.AuthorizePayment
      • response.CancelPaymentResponse
      • response.CapturePaymentResponse
      • response.ContinueThreeDS
      • response.Currency
      • response.Customer
      • response.CustomerTransaction
      • response.CustomerTransactions
      • response.Customers
      • response.Error
      • response.Merchant
      • response.MerchantInitiatedPayment
      • response.MerchantSettings
      • response.PaymentLink
      • response.PaymentLinkInfo
      • response.PaymentLinkMetadata
      • response.PaymentLinksInfo
      • response.PaymentLinksStatistics
      • response.PaymentLinksStatisticsItem
      • response.Payout
      • response.Permission
      • response.RefundPaymentResponse
      • response.Report
      • response.SavedCard
      • response.Session
      • response.Settlement
      • response.SettlementTransaction
      • response.Store
      • response.Stores
      • response.Transaction
      • response.TransactionDetails
      • response.TransactionEvents
      • response.TransactionHistoryEvent
      • response.TransactionHistoryEventData
      • response.TransactionResponse
      • response.TransactionWebhookDetails
      • response.Transactions
      • response.UpdateMerchantSettingsResponse
      • response.UserProfile
      • value.PaymentMethod
    • receipt
    • Error
    • DecimalAmount
    • ProductType
    • ProductCategory
    • Product
    • Order
    • AgentBalance
    • AgentDeposit
    • TopupRequest
    • CreateOrderRequest
Pay APIGate APIDashboard
Pay APIGate APIDashboard
  1. API

Payouts

What is this?
A two-step flow where the Merchant first saves a user’s card (tokenization only, no validation/charge), then triggers a payout to that tokenized card.

Actors#

Merchant — initiates card saving and payouts
PlexyPay — tokenization, orchestration, webhooks
Bank/Network — processes the outgoing credit transfer (payout)

When to use#

Send funds to a user’s card (e.g., refunds outside original tx, partner rewards, gig payouts) using a saved card token.

Security & Notes#

Card saving does not validate card activity — no auth/charge is made; only tokenization.
Treat webhooks as the source of truth for terminal states.

High-level sequence#

1.
Merchant → PlexyPay: Save card POST /v1/cards (tokenize only; creates a customer on Plexy).
2.
PlexyPay → Merchant (Webhook): Card saved — returns cardTokenId (plus basic card meta).
3.
Merchant → PlexyPay: Payout POST /v1/payout with tokenId = cardTokenId and amount.
4.
PlexyPay ↔ Bank/Network: Process the outgoing credit.
5.
PlexyPay → Merchant (Webhook): Final payout status (success / failed) with identifiers.

The save-card endpoint does not run any authorization/validation; it only returns a token later via webhook.
Payouts Integration Flow

Statuses#

Payout in Progress
new — A new payout request has been created and queued for processing. Validation and routing checks have not been completed yet.
processing — The payout is being processed by Plexy Pay and/or the payout provider (bank, card scheme, wallet, etc.). The final outcome (settled, rejected, or failed) is not yet known.
Payout Settled
settled — The payout has been successfully paid out to the recipient and confirmed by the payout provider.
Funds have been debited from the merchant’s balance (or source account) and are considered irreversibly settled on the recipient side.
Payout Failed
rejected — The payout was rejected during validation or by the payout provider.
Typical reasons: invalid recipient details, insufficient merchant balance, regulatory/limit checks, or payout not allowed for this destination.
No funds were debited from the merchant’s balance as part of this payout.
failed — The payout failed due to a technical or system error (for example, network timeouts, provider unavailability, or internal error).
You may safely retry the payout (with the same or a new request identifier, depending on your idempotency strategy) after investigating the error_code and error_message.
Final vs Non-Final Statuses
Non-final statuses: new, processing
Final statuses: settled, rejected, failed
Once a payout reaches a final status, it will not transition to another status.

Webhook Example#

{
  "name": "transaction.settled",
  "data": {
    "amount": 100,
    "bin": null,
    "brand": null,
    "cardTokenId": null,
    "createdAt": "2025-12-08T13:48:09.127968Z",
    "currency": "KZT",
    "customerId": null,
    "description": "Payout For Alexander",
    "id": "019ife38-3g27-3ebc-9ba8-3f9cd0defffb",
    "last4": null,
    "merchantReference": null,
    "parentTransactionId": null,
    "payerIp": null,
    "paymentLinkId": null,
    "paymentMethod": "card",
    "paymentSessionId": null,
    "recurringType": null,
    "retrievalReferenceNumber": "524947389757",
    "secure3d": null,
    "status": "settled",
    "storeId": "0b4fg5da-a0b5-4g05-9605-d8g61b302af3",
    "terminalId": "aa825b14-524c-1750-9bf2-139eef7eb197",
    "type": "unknown",
    "updatedAt": "2025-12-08T13:48:12.079754Z"
  },
  "postedAt": "2025-12-08T13:48:15.135728094Z"
}
 

Good practices#

Store cardTokenId mapped to your externalUserId.
Log webhooks and reconcile by transactionId/payoutRef.
Modified at 2025-12-11 10:29:39
Previous
List
Next
Retrieve Payout Transactions
Built with