Skip to content
PandaPayLens

Providers and formats

Each provider has its own adapter with explicit, versioned semantics. Nothing is detected just because a string mentions a provider's name.

Stripe adapter 0.2.0

Format idInput
stripe.api_errorStripe API error response ({ error: { type, code, decline_code, advice_code } })
stripe.payment_intentPaymentIntent object snapshot
stripe.event.snapshotAPI v1 snapshot event (webhook payload) for PaymentIntent, Charge, Refund and Dispute objects

Adyen adapter 0.2.0

Format idInput
adyen.webhook.standardStandard payment webhook (notificationItems / NotificationRequestItem)
adyen.payment_responsePayment API response with resultCode and pspReference
adyen.api_errorAPI error response (status, errorCode, errorType, message)

payabl. adapter 0.1.0

Format idInput
payabl.gateway.responseGateway API synchronous response (URL-encoded status, transactionid, errormessage)
payabl.notificationNotification / callback (URL-encoded transactionid, type, errorcode, security)
payabl.session.initHosted Payment Page init or Web SDK session response

Checkout.com adapter 0.1.0

Format idInput
checkout.api_errorAPI error response ({ request_id, error_type, error_codes[] })
checkout.payment_responsePayments API response or payment details (pay_ id, status, approved, response_code)
checkout.action_acceptedCapture, refund or void accepted response ({ action_id, reference, _links })
checkout.webhookWorkflows webhook for gateway payment events (created_on, or timestamp + source envelope)

Braintree adapter 0.1.0

Format idInput
braintree.graphql.responseGraphQL API response (data with transactions and statusHistory, errors[].extensions with errorClass and legacyCode)
braintree.transactionTransaction snapshot: SDK object (snake_case or camelCase), SDK result with a transaction, or GraphQL Transaction/Refund
braintree.sdk.validation_errorsSDK result with validation errors (attribute, code, message)
braintree.webhook.notificationWebhook notification parsed by a Braintree SDK (kind, timestamp, subject)

PayPal adapter 0.1.0

Format idInput
paypal.api_errorREST error response ({ name, message, debug_id, details[{ issue, description, field }] })
paypal.orderOrders v2 order resource with purchase_units[].payments (captures, authorizations, refunds)
paypal.payment_resourcePayments v2 capture, authorization or refund resource
paypal.webhookWebhook event (id, event_type, create_time, resource) for Orders v2 and Payments v2
paypal.webhook.verify_requestverify-webhook-signature request body; the embedded webhook_event is analyzed

Mollie adapter 0.1.0

Format idInput
mollie.paymentPayments API v2 payment object (resource: payment), e.g. GET /v2/payments/{id}
mollie.refundRefund object (resource: refund)
mollie.chargebackChargeback object (resource: chargeback)
mollie.captureCapture object (resource: capture)
mollie.errorAPI v2 error response (status, title, detail, field, _links.documentation)
mollie.eventNext-gen webhook event with the full payload (_embedded.entity), experimental

Square adapter 0.1.0

Format idInput
square.error_responseError response ({ errors: [{ category, code, detail, field }] }), optionally with the FAILED payment or refund
square.paymentPayment object, bare or as { payment: {...} }
square.refundPaymentRefund object, bare or as { refund: {...} }
square.webhookpayment.created, payment.updated, refund.created and refund.updated events

Flutterwave adapter 0.1.0

Format idInput
flutterwave.v3.responsev3 REST response (status, message, data) with a transaction, transfer, refund or chargeback object, an authorization prompt or an error message
flutterwave.v3.objectBare v3 transaction, transfer, refund or chargeback object
flutterwave.v3.webhookv3 webhook (event, data, event.type): charge.completed, preauth-card, transfer.completed, chargeback events
flutterwave.v3.refund_webhookv3 refund webhook (AmountRefunded, FlwRef, TransactionId, meta string)
flutterwave.v3.server_errorv3 server error (error_id, message, code app_error)
flutterwave.v4.errorv4 error response (status failed, error.type, error.code)
flutterwave.v4.responsev4 response with a charge, transfer, refund or chargeback object
flutterwave.v4.webhookv4 webhook (webhook_id or id, timestamp, type, data)

Paystack adapter 0.1.0

Format idInput
paystack.api_responseResponse envelope (status, message, data) with a transaction (initialize, verify, fetch, charge_authorization, Charge API states), refund, dispute or transfer
paystack.api_errorError response (status false, message, type, code, meta.nextStep)
paystack.webhookWebhook body (event, data) for charge, dispute, refund, transfer and bank.transfer.rejected events

Razorpay adapter 0.1.0

Format idInput
razorpay.api_errorPayments API v1 error response ({ error: { code, description, field, source, step, reason, metadata } }), also wrapped as { statusCode, error } by the Node.js SDK
razorpay.paymentPayment entity with status and the error_code, error_source, error_step and error_reason fields
razorpay.orderOrder entity (created, attempted, paid)
razorpay.refundRefund entity (pending, processed, failed)
razorpay.disputeDispute entity (phase, status, reason_code)
razorpay.settlementSettlement entity (created, processed, failed)
razorpay.payoutRazorpayX payout entity with status and status_details
razorpay.collectionCollection ({ entity: collection, items }) of the entities above
razorpay.webhookWebhook envelope (entity: event, event, contains, payload, created_at) for payment, order, refund, dispute, settlement and payout events

PayU India adapter 0.1.0

Format idInput
payu_india.payment_responsePayment response posted to surl / furl / curl and the payment webhook (mihpayid, txnid, status, unmappedstatus, error, error_Message, field7-field9)
payu_india.verify_paymentVerify Payment API JSON (status, msg, transaction_details keyed by txnid)
payu_india.command_responseCommand API JSON of refund, capture and cancel requests (status, msg, mihpayid, request_id, error_code)

BlueSnap adapter 0.1.0

Format idInput
bluesnap.card_transactionPayment API (JSON) card transaction response (cardTransactionType, transactionId, processingInfo.processingStatus)
bluesnap.refundPayment API (JSON) refund response (refundTransactionId, refundStatus)
bluesnap.errorPayment API (JSON) error body (message[] with errorName, code, description)
bluesnap.card_transaction_xmlPayment API (XML, namespace http://ws.plimus.com) card transaction response (<card-transaction> with card-transaction-type, transaction-id, processing-info)
bluesnap.error_xmlPayment API (XML, namespace http://ws.plimus.com) error body (<messages> with message elements holding error-name, code, description)
bluesnap.webhookForm-encoded webhook (IPN) named by transactionType
bluesnap.throttlingHTTP 429 or 503 with a documented plain-text throttling message

EBANX adapter 0.1.0

Format idInput
ebanx.payin_responsePay-in Direct API response (/ws/direct, /ws/query, /ws/capture, /ws/cancel, /ws/refund) with the payment object
ebanx.payin_errorPay-in error envelope (status ERROR, status_code, status_message)
ebanx.payment_notificationPayment notification form post (operation, notification_type, hash_codes)
ebanx.payout_responsePayout API response (type with a payout object, or an HP-* error)
ebanx.payout_notificationPayout notification form post (operation payout_status_*, hash_codes)

dLocal adapter 0.1.0

Format idInput
dlocal.payins.paymentPayins payment object (response or payment notification)
dlocal.payins.refundPayins refund object (response or refund notification)
dlocal.payins.chargebackPayins chargeback notification or chargeback object
dlocal.api_errorHTTP error envelope (code, message, param) of the Payins API and Payouts v3
dlocal.payouts_v3.payoutPayouts v3 payout object (response or payout notification)

Rapyd adapter 0.1.0

Format idInput
rapyd.api_responseMerchant API REST response (status object with error_code, status, message, response_code, operation_id; payment, refund, payout or dispute in data)
rapyd.webhookPayment, refund, dispute and payout webhook (id wh_, type, data, trigger_operation_id), also inside the HTTP client wrapper or as a delivery record

Airwallex adapter 0.1.0

Format idInput
airwallex.errorPayments Client API error body ({ code, message, source, trace_id, details, provider_original_response_code })
airwallex.payment_intentPaymentIntent snapshot with the embedded latest_payment_attempt
airwallex.payment_attemptPaymentAttempt snapshot
airwallex.refundRefund snapshot
airwallex.payment_disputePaymentDispute snapshot
airwallex.webhookPayments webhook ({ id, name, data.object, created_at, version }) for PaymentIntent, PaymentAttempt, Refund and PaymentDispute events

Paysafe adapter 0.1.0

Format idInput
paysafe.resourcePayments API v1 resource response (payment handle, payment, settlement, refund, void, credit, verification), including HTTP 402 declines with an error object
paysafe.errorPayments API v1 error body ({ error: { code, message, details, fieldErrors, additionalDetails } }) or an error response with an X-Application-Status-Code header
paysafe.webhookPayments API webhook envelope (eventName, payload, attemptNumber, resourceId, eventDate)

Nuvei adapter 0.1.0

Format idInput
nuvei.rest_responseREST API 1.0 JSON response (status, errCode, transactionStatus and the gateway and APM error fields)
nuvei.payment_dmnPayment DMN (query string or form body with ppp_status and Status)
nuvei.withdrawal_dmnWithdrawal DMN (wdRequestId, wdRequestStatus, wdOrderStatus)
nuvei.chargeback_dmnControl Panel event DMN with EventType Chargeback

Authorize.net adapter 0.2.0

Format idInput
authorize_net.transaction_responseAuthorize.net API createTransactionResponse, JSON or XML (transactionResponse with responseCode and reason codes, plus messages)
authorize_net.api_messagesAuthorize.net API response with only messages (resultCode, I/E codes), JSON or XML (for example ErrorResponse)
authorize_net.webhookWebhook notification (notificationId, eventType net.authorize.*, payload)

Cybersource adapter 0.1.0

Format idInput
cybersource.payment_responseREST Payments API v2 HTTP 201 response (authorization, sale, capture, reversal, refund, credit, void)
cybersource.error_responseREST HTTP 400 or 502 error body (status, reason, message, details[])
cybersource.webhookWebhook notification envelope, version 3 (eventType, productId, payload)
cybersource.transaction_detailsTransaction Details response (rootId, applicationInformation)
cybersource.pay_by_bank_payloadDecrypted Pay by Bank notification payload (dotted keys)

Worldpay adapter 0.2.0

Format idInput
worldpay.eventAccess Events v1 webhook ({ eventId, eventTimestamp, eventDetails }) for payment, payout and chargeback events
worldpay.payment_responsePayments API (2024-06-01) or Card Payments v7 response (outcome, paymentId, commandId, refusalCode)
worldpay.errorError response ({ errorName, message, validationErrors[] })
worldpay.payment_queryPayment Queries v1 payment (lastEvent and events[] history)
worldpay.card_payments_events_queryDeprecated Card Payments events query (Title Case lastEvent)
worldpay.wpg.replyWPG paymentService reply with error, orderStatus (payment or error) or ok, pasted as XML or as the body of an HTTP response. WPG documents begin with <!DOCTYPE paymentService ...>; PandaPayLens does not accept DOCTYPE declarations, so paste the document without that line.
worldpay.wpg.notificationWPG order notification (paymentService notify orderStatusEvent with payment and lastEvent). WPG documents begin with <!DOCTYPE paymentService ...>; PandaPayLens does not accept DOCTYPE declarations, so paste the document without that line.
worldpay.cnpapi.online_responsecnpAPI cnpOnlineResponse (namespace http://www.vantivcnp.com/schema) with an authorization, sale, capture, credit, void or authorization reversal response

Trustly adapter 0.1.0

Format idInput
trustly.eu.notificationEU JSON-RPC notification (credit, debit, pending, cancel, account, kyc, payoutconfirmation, payoutfailed, payoutdowngraded, verifyAccount, assessAccount, advice)
trustly.eu.resultEU JSON-RPC method result (Deposit, Refund, AccountPayout, ApproveWithdrawal, GetWithdrawals)
trustly.eu.errorEU JSON-RPC error envelope (JSONRPCError)
trustly.amer.eventNorth America event notification (eventId, eventType, objectId), form-encoded or JSON
trustly.amer.transactionNorth America REST Transaction object (transactionId, status, paymentProviderTransaction)
trustly.amer.errorNorth America REST error body (errors[] with code)

DECTA adapter 0.1.0

Format idInput
decta.orderDecta Gate API v0.6 Order object (API response or order.* / oct.* webhook body)
decta.host2hostHost2Host, wallet and manual 3-D Secure step responses (processing_status, threed_check_url, status tds_*)
decta.validation_errorAPI validation error object ({ <field>: [{ message, code }] })
decta.text_errorHTTP error response with a documented plain-text error body

Inpay adapter 0.1.0

Format idInput
inpay.payoutPayout payment request (status response, search item or webhook: inpay_unique_reference, end_to_end_id, state, reasons)
inpay.orderPay-in Order (GetOrder or order webhook: uuid, status, payments[], refund)
inpay.errorError body ({ errors: [...] }, { error: { code, title, details } } or { message })
inpay.iso20022ISO 20022 payment status report (XML Document with CstmrPmtStsRpt or FIToFIPmtStsRpt): group status and status reasons

Finrax adapter 0.1.0

Format idInput
finrax.paymentPayment object with deposits[] and nested refunds (GET /v1/payments/{id})
finrax.payment.create_responseCreate or submit payment response (paymentInfo and paymentUrl)
finrax.callback.deposit_receivedDeposit received callback (paymentId, depositId, status, amounts)
finrax.withdrawalWithdrawal created response (withdrawId, clientWithdrawId, status)
finrax.withdrawal.pending_approvalWithdrawal pending approval response (withdrawalId, clientLabel)
finrax.callback.withdrawalWithdrawal broadcast callback (COMPLETED, FAILED or BLOCKED)
finrax.callback.withdrawal_approvalWithdrawal approval callback (APPROVED, PENDING, REJECTED or SKIPPED)
finrax.errorError body (timestamp, httpStatus, httpError, message, path)

AstroPay adapter 0.1.0

Format idInput
astropay.checkout.create_responseCheckout create payment response (payment_external_id, status)
astropay.checkout.callbackCheckout callback (payment_external_id, payment_status, payment_info)
astropay.checkout.paymentPayment object with a Checkout-only status
astropay.wof.paymentWallet on File payment object (authorize, capture, reversal, refund)
astropay.payment_objectCheckout or Wallet on File payment object whose family is not visible
astropay.cashout_v1Cashouts V1 response or callback
astropay.direct_paymentDirect Payment response or callback
astropay.direct_withdrawalDirect Withdrawal response or callback
astropay.qr.callbackQR Payments deposit callback
astropay.merchant_gateway.errorOneTouch / merchant-api error envelope (error, internal_term, reasons)
astropay.partner.errorCheckout and Wallet on File error body (error, message)
astropay.cashout_v1.errorCashouts V1 error (description text and HTTP status only)

eZeeWallet adapter 0.1.0

Format idInput
ezeewallet.transferPOST /transfers and /transfers_new responses (transfer wrapper) and GET /transfers list items
ezeewallet.refundPOST /refunds responses (refund wrapper)
ezeewallet.transactionGET /transaction lookup (ezw_reference_id, status, type)
ezeewallet.single_payoutPOST /single_payouts and /single_payouts_new responses
ezeewallet.batch_payoutPOST /batch_payouts_new responses (and legacy /batch_payouts when selected manually)
ezeewallet.errorError envelope { "error": { "code", "message" } }
ezeewallet.notificationTransfer and payout notifications (unique_id, status, signature, decline_reason)

Skrill adapter 0.1.0

Format idInput
skrill.status_urlstatus_url post (mb_transaction_id, mb_amount, mb_currency, status, failed_reason_code), also payout posts with the same fields
skrill.refund_statusRefund status report (mb_transaction_id, status, mb_amount, mb_currency)
skrill.recurring_statusRecurring billing post (rec_payment_id, rec_payment_type, status)
skrill.ubp.errorUnlinked Merchant Bank Payout JSON error response
skrill.api.errorXML <response><error><error_msg> of refund.pl, pay.pl and ondemand_request.pl, decoded with the API error strings
skrill.api.refundXML refund.pl execution response (mb_amount, mb_currency, mb_transaction_id, status, transaction_id)
skrill.api.transactionXML <response><transaction> execution response of pay.pl (send money, Quick Checkout payouts) and ondemand_request.pl (1-Tap)
skrill.mqi.http_errorMQI HTTP error (401 to 405) with a plain-text body, when Skrill is selected manually

MiFinity adapter 0.1.0

Format idInput
mifinity.errorError envelope ({ errors: [{ type, errorCode, message, field }] })
mifinity.deposit_callbackeWallet deposit callback (traceId, validationKey, transactionReference, money)
mifinity.deposit_statusPayment Status API response (status, detailedStatus, paymentResponse)
mifinity.payout_statusPayout callback or Transaction Status lookup (transactionStatus 1 to 8)
mifinity.payout_responseSynchronous payout response (PAB, PAC, PMC, Account to Account, PayAnyCoin)

NMI adapter 0.1.0

Format idInput
nmi.classic.responseClassic Payment API (transact.php) query-string response (response, responsetext, transactionid, response_code)
nmi.webhookMerchant webhook JSON (event_id, event_type, event_body)

Paymentwall adapter 0.1.0

Format idInput
paymentwall.pingbackPingback query string (uid, type, ref, sign_version, sig)
paymentwall.brick.errorBrick error JSON { type: "Error", error, code }
paymentwall.brick.sdk_errorPHP SDK error envelope { success: 0, error: { message, code } }
paymentwall.brick.chargeBrick charge object
paymentwall.brick.subscriptionBrick subscription object
paymentwall.brick.3dsBrick 3-D Secure step { success: 0, secure: { redirect | formHTML } }
paymentwall.mobiamo.errorMobiamo error (W codes)
paymentwall.mobiamo.responseMobiamo payment response (ref, flow, completed)
paymentwall.error.unidentifiedError code without a product-specific structure (selected manually); all documented meanings are listed

Ecommpay adapter 0.1.0

Format idInput
ecommpay.callbackGate payment callback (project_id, payment, operation, signature)
ecommpay.payment_statusGate payment status response (payment, operations[], errors[])
ecommpay.request_errorGate request-level error ({ status: error, code, message })
ecommpay.request_acceptedGate asynchronous acceptance ({ status: success, request_id, project_id, payment_id })
ecommpay.chargeback_callbackChargeback summary and detailed callbacks (unsigned)

emerchantpay adapter 0.1.0

Format idInput
emerchantpay.notificationGenesis processing notification (form-encoded unique_id, transaction_type, status, terminal_token, signature), incl. dispute events
emerchantpay.wpf.notificationGenesis WPF notification (form-encoded wpf_unique_id, wpf_status)
emerchantpay.payment_response.xmlGenesis XML response with root payment_response (Processing API, reconcile, Smart Routing), pasted as XML or as the body of an HTTP response
emerchantpay.payment_response.objectJSON object with the documented Genesis payment_response fields

CCBill adapter 0.1.0

Format idInput
ccbill.webhookWebhook body (URL-encoded or JSON); event type from the query string when available
ccbill.background_postBackground Post (Approval / Denial Post URL)
ccbill.rest.chargeRESTful Transaction API charge response
ccbill.rest.errorRESTful API and 3DS error envelope

Segpay adapter 0.1.0

Format idInput
segpay.processing.transactionProcessing transaction postback (default keys: trantype, action, stage, approved)
segpay.processing.memberProcessing member management postback (Probe, Enable, Disable, Cancel, Reactivation)
segpay.processing.paypal_disputeProcessing PayPal Dispute postback
segpay.gateway.notificationGateway Event Notification (EventCode, SubEventTypeID, ResponseCode)

Trust Payments adapter 0.1.0

Format idInput
trust_payments.webservices.envelopeWebservices API JSON response envelope (response[] or responses[]), including TRANSACTIONQUERY records
trust_payments.jwt.payloadDecoded response JWT payload ({ iat, payload: { response[] }, aud })
trust_payments.response.objectOne Webservices response object (errorcode, requesttypedescription, transactionreference)
trust_payments.url_notificationURL notification (form-encoded, notificationreference, responsesitesecurity)
trust_payments.payment_pages.redirectPayment Pages redirect fields (errorcode, settlestatus, transactionreference)

PXP Financial adapter 0.1.0

Format idInput
pxp.transaction_responseTransactions API v1 response or lookup item (state, stateData, systemTransactionId)
pxp.api_errorAPI error envelope ({ correlationId, details, errorCode, errorReason })
pxp.webhookMerchant webhook (eventCategory, eventDate, eventData, eventOwner) for transaction and authentication events

Verotel adapter 0.1.0

Format idInput
verotel.flexpay.postbackFlexPay postback key=value data (saleID, shopID, type, event, signature)
verotel.rum.postbackVerotelRUM postback (trn, trn_id, usercode)
verotel.api.errorControl Center API error envelope { error: { documentation, status, title } }
verotel.api.transactionControl Center API transaction object
verotel.api.saleControl Center API sale object
verotel.api.actionControl Center API action response
verotel.flexpay.statusFlexPay status page (plain text name: value lines, response FOUND, NOTFOUND or ERROR)

NETbilling adapter 0.1.0

Format idInput
netbilling.direct3.responseDirect Mode 3.2 response (URL-encoded status_code, trans_id, auth_msg)
netbilling.direct3.exceptionDirect Mode 3.2 exception (6xx/7xx HTTP status, empty body)
netbilling.paymentform.responsePayment Form 2.2 return / postback with default Ecom_Ezic_Response_* names (experimental)
netbilling.memberupdate.memberMember Update 1.1 GET response (experimental)

Stripe semantics

  • code, decline_code and advice_code are decoded separately. Retry guidance uses the most specific signal: advice code, then decline code, then error code, then error type.
  • An api_error does not say whether the request took effect. PandaPayLens recommends verifying the object's state before trying again with the same idempotency key.
  • Events are linked by PaymentIntent and charge ids. Duplicate deliveries are recognized by event id.
  • A PaymentIntent snapshot's created time is when the PaymentIntent was created, not when its status was observed, so snapshots have no event time on the timeline.
  • Not supported yet: v2 thin events (v2.core.event). They carry no embedded object, so they are recognized and explained, but not analyzed.

References: Stripe error codes, decline codes, webhooks.

Adyen semantics

  • Standard webhooks are read from notificationItems[].NotificationRequestItem. Each item becomes its own event.
  • Modifications (capture, refund, cancellation) are linked to the payment through originalReference. merchantReference is never used to merge payments, because it can be reused across attempts; it is only used to flag possible duplicate charges.
  • Duplicate deliveries are recognized by eventCode + pspReference, not by timestamp.
  • CAPTURE or REFUND with success=true means Adyen processed the request. It does not mean funds settled or reached the shopper.
  • On successful authorisations Adyen's reason field holds the auth code, card summary and expiry; PandaPayLens drops it.
  • Not supported yet: other webhook families (Balance Platform, Management, etc.). They are recognized and explained, but not analyzed.

References: webhook types, handling webhook events, refusal reasons.

Adding a provider

A new adapter needs input schemas, synthetic fixtures, documentation, tests and supported-version metadata. See CONTRIBUTING.md in the repository.