Skip to main content
StarkPay is StarkFi’s payment product. You register a payment intent, create a transaction for the payer’s chosen method, then execute on-chain or wait for fiat settlement — depending on the flow.
Confirm StarkPay-related products are enabled for your deployment with GET /config/products (requires x-api-key). At minimum, enable the payment methods you plan to offer (crypto, pix, credit_card).

Checkout vs financial transaction

StarkPay distinguishes two payment contexts. KYC/KYB rules depend on which one you use.
ContextWhat it isKYC/KYB required?
Checkout (order)Payment linked to a pre-created order. The payer completes a hosted checkout experience.No — checkout flows do not require KYC/KYB
Financial transactionDirect payment registration without an order (executor_id: api_transaction). Treated as a regulated financial operation.Yes for fiat-related methods; no for 100% crypto

How checkout is identified

A payment is treated as checkout when any of the following is true:
  • You register the payment intent with an order_code that references an existing order (sets executor_id to order_transaction automatically), or
  • The payment’s executor_id is already order_transaction
In both cases, POST /payment/register/intents-create-transaction skips KYC/KYB validation, regardless of payment method.

When KYC/KYB is required

For financial transactions (not checkout), KYC/KYB is enforced when:
  • transaction_type is not pure crypto (e.g. pixcrypto, cardcrypto, cardfiat), and
  • You provide payer_email and/or payer_wallet
Pure crypto financial transactions never require KYC/KYB, even when payer identity is sent.
StatusMeaning
kyc_verification_requiredPayer has not completed KYC/KYB
kyc_not_approvedPayer started verification but is not approved
Route the user through the KYC flow before retrying transaction creation.

Payment methods

transaction_typeProduct flagDescription
cryptocryptoPayer sends tokens on-chain (any supported chain/token)
pixcryptopixPIX → crypto settlement
cardcryptocredit_cardCard → crypto settlement
cardfiatcredit_cardCard → fiat settlement
cryptopixcryptoCrypto → PIX off-ramp
fiatcryptocryptoFiat → crypto (on-ramp style)

Integration flow

1

Choose your path

Checkout: create an order, then register payment with order_code.Financial transaction: register a standalone payment intent with POST /payment/register/intents-create-order (executor_id: api_transaction).
2

Register the payment intent

POST /payment/register/intents-create-orderRequired tenant fields include public_client_id (format stkf_ + 32 hex characters) and webhook_url.
3

Create the payer transaction

With the returned payment_id, call POST /payment/register/intents-create-transaction with the payer’s wallet, email, and transaction_type.KYC/KYB applies only to financial transactions with fiat-related types — not to checkout or pure crypto.
4

Execute or monitor

Split payments

Use split_payment_config to route received funds to multiple wallets:
"split_payment_config": [
  {
    "receiver_wallet": "0x9b57847b69D0354837F7b723133B9dBCbefb4F9F",
    "receiver_percent": 100
  }
]
Percentages must sum to 100 across receivers.

Webhooks

Set tenant_data.webhook_url when registering the payment. StarkFi forwards status changes so you do not need to poll for every update.