Skip to content

Logo

Payok

Seamless Payments. Settled Instantly

Supports in this guide: Payments, Payouts

Provider website: payok.com


What you need to do for start processing transactions (brief summary)

  1. Choose account type
  2. Get your credentials (from Payok)
  3. Connect in Dashboard
  4. Send an API request

Choose account type

Payok has a single account type that covers both directions:

  • Provider account -> used for both payments and payouts across its local methods in Indonesia, Vietnam, Thailand, Turkey, India, Colombia, and Brazil

If you're not sure whether Payok fits your use case, confirm with your Corefy account manager.


Prerequisites: get from Payok

Submit a connection request at payok.com or contact your Payok account manager directly to get your account verified and receive the following credentials.

  • Merchant ID -> Corefy field merchant_id.
  • Public Key (optional, file upload) -> Corefy field public_key.
  • Private Key (file upload) -> Corefy field private_key -> used to sign every request.

Payments processing (connect Provider account, create payment-invoice)

Connect Provider account in Corefy Dashboard

Step 1 - Open connection form

Open Payok in the provider directory and press Connect at Payok Provider Overview page in the New connection section.

Step 2 - Fill in fields and select settings

  • Merchant ID
  • Public Key (optional)
  • Private Key
  • Currency -> choose from IDR, VND, THB, TRY, INR, COP, BRL
  • Test Mode -> (enable if you are using sandbox credentials)

Success

You have connected Payok Provider account!


First request to Corefy API (MIN)

What it does: creates a payment-invoice and returns a redirect link to the chosen local method's payment page.

Payment - MIN

POST /api/payment-invoices

{
  "data": {
    "type": "payment-invoice",
    "attributes": {
      "reference_id": "8e3dbbb0-17af-4c9a-bedb-93bdac6900a2",
      "service": "ovo_idr_hpp",
      "currency": "IDR",
      "amount": 10000
    }
  }
}

Payment - MAX

POST /api/payment-invoices

{
  "data": {
    "type": "payment-invoice",
    "attributes": {
      "reference_id": "6795502c-e27d-4d07-85e0-93245aab9a3f",
      "service": "ovo_idr_hpp",
      "currency": "IDR",
      "amount": 10000,
      "customer": {
        "reference_id": "cus_123",
        "name": "John Doe",
        "email": "johndoe@gmail.com",
        "phone": "+6281234567890",
        "address": {
          "country": "ID",
          "city": "Jakarta",
          "full_address": "1 Main street",
          "post_code": "12345"
        }
      }
    }
  }
}

customer is optional - anything you omit falls back to the Constants below. For bank-transfer/virtual-account style methods specifically, you may also need fields.account/fields.bank_code (or fields.document_number for some) - ask your account manager which fields apply to your chosen method. This connector covers a very wide range of local methods across 7 countries - see Additional info for the full breakdown.


Extended request (MAX)

Why add extra fields (typical reasons): - Provide additional customer details for compliance/reconciliation - Positively influence conversion rate - Include optional fields required by your specific flow


Options

Options are configured on the Corefy side and affect how Corefy builds provider requests or processes responses.

Currently available options (2)

  • use_english_language - controls which language is sent to Payok for the checkout page.
  • finalize_after_minutes - automatically fails a payment that's still pending after the given number of minutes. (Available only on a specific subset of services - see Additional info.)
use_english_language

What it does: No sends the checkout page language based on the transaction's currency; Yes always sends English regardless of currency.

When to use: enable it if you want an English checkout page for every customer regardless of the currency used.

Default: not set (language follows currency)

Allowed values: true / false

finalize_after_minutes

What it does: if the payment is still pending after this many minutes, Corefy marks it as failed instead of leaving it open indefinitely.

When to use: set it if you want a predictable cutoff for stale pending payments rather than waiting on Payok's own expiry.

Default: not set (payment stays pending until Payok itself reports a final status)

Allowed values: any whole number of minutes


Constants (fallback fields)

Constants are static values that Corefy can send to the provider instead of dynamic data from your API request, when those fields are missing in the request. Available on every Payment service.

Priority (predictable rule): 1. If a value is present in the request -> Corefy uses the request value 2. Else if the constant is set -> Corefy uses the constant 3. Else -> provider may reject the request or apply its defaults (depends on provider)

Currently available constants (constant -> Corefy API field)

  • FULL_NAME -> customer.name
  • EMAIL -> customer.email
  • PHONE -> customer.phone
  • DEVICE_ID -> no direct request field - falls back to customer.reference_id if this constant isn't set either.

Payouts processing (connect Provider account, create payout-invoice)

Connect Provider account in Corefy Dashboard

Uses the same Provider account connection as Payments above - one connection covers both directions, there's nothing extra to fill in for payouts specifically.


First request to Corefy API (MIN)

What it does: creates a payout-invoice and sends funds to a bank account or local wallet.

Payout - MIN (UPI, India)

POST /api/payout-invoices

{
  "data": {
    "type": "payout-invoice",
    "attributes": {
      "reference_id": "0dde9e79-2c64-4703-adaf-93d710633401",
      "service": "upi_inr",
      "currency": "INR",
      "amount": 100,
      "customer": {
        "reference_id": "cus_123"
      },
      "fields": {
        "account_number": "110147429820",
        "beneficiary_full_name": "John Doe",
        "ifsc_bank_code": "CNRB0004425"
      }
    }
  }
}

This request only succeeds if the Constants below are configured for this service (customer.email/customer.phone aren't sent in this example, so Payok needs them from the Constants instead).

Payout - MAX (UPI, India)

POST /api/payout-invoices

{
  "data": {
    "type": "payout-invoice",
    "attributes": {
      "reference_id": "7976b4ce-fadd-4585-baa0-6b02c65351dc",
      "service": "upi_inr",
      "currency": "INR",
      "amount": 100,
      "customer": {
        "reference_id": "cus_123",
        "name": "John Doe",
        "email": "johndoe@gmail.com",
        "phone": "+919876543210"
      },
      "fields": {
        "account_number": "110147429820",
        "beneficiary_full_name": "John Doe",
        "ifsc_bank_code": "CNRB0004425"
      }
    }
  }
}

This connector covers a very wide range of local payout methods across 7 countries - most need some combination of fields.account_number/bank_account_number, fields.beneficiary_full_name (or beneficiary_first_name/beneficiary_last_name), and a local identifier (fields.ifsc/ifsc_bank_code for India, fields.cpf_number/identity_id/document_type for others) - ask your account manager for the exact field list for your chosen method.


Extended request (MAX)

Why add extra fields (typical reasons): - Provide additional customer details for compliance/reconciliation - Positively influence conversion rate - Include optional fields required by your specific flow


Options

Options are configured on the Corefy side and affect how Corefy builds provider requests or processes responses.

Currently available options (2)

  • use_english_language - same behavior as on the Payments flow, applied to payout-side correspondence.
  • ignore_callback - tells Corefy to disregard Payok's own callback notifications entirely.
ignore_callback

What it does: when enabled, Corefy ignores callback notifications sent by Payok for this connection, relying on status checks/reconciliation instead.

When to use: enable only if instructed by Payok or your Corefy account manager.

Default: false

Allowed values: true / false


Constants (fallback fields)

Constants are static values that Corefy can send to the provider instead of dynamic data from your API request, when those fields are missing in the request. Available on every Payout service.

Priority (predictable rule): 1. If a value is present in the request -> Corefy uses the request value 2. Else if the constant is set -> Corefy uses the constant 3. Else -> provider may reject the request or apply its defaults (depends on provider)

Currently available constants (constant -> Corefy API field)

  • EMAIL -> customer.email
  • PHONE -> customer.phone

Additional info

  1. Callback routing is automatic - Corefy generates the callback URL per transaction, nothing to configure in Payok's own back-office.
  2. Local payment methods available on the Payments (Provider account) flow (actual availability depends on what's enabled for your account) - Payok covers over 40 service codes across:

    Country Currency Examples
    Indonesia IDR OVO, DANA, ShopeePay, LinkAja, QRIS, Alfamart, several bank virtual accounts (BCA, BNI, BRI, Mandiri, Permata, BSI, BNC, CIMB)
    Vietnam VND MoMo, ViettelPay, ZaloPay, several bank transfers/QR codes (Techcombank, ACB, Vietinbank, BIDV, VPBank, TPBank, VIB, PVcomBank)
    Thailand THB PromptPay, TrueMoney, bank transfer
    Turkey TRY Papara, bank transfer
    India INR UPI
    Colombia COP PSE, Nequi, Efecty
    Brazil BRL PIX (redirect and requisites/_invoice variants)
  3. Local payout methods follow the same country/currency coverage as Payments, with roughly 74 service codes total (Colombia and Indonesia have the most bank-specific routes).


FAQ / Troubleshooting

  • Invalid credentials / auth error -> verify credentials for the selected environment
  • Payout fails with missing details -> confirm the Constants (EMAIL/PHONE) are configured for the service, or send customer.email/customer.phone directly, along with the method-specific fields.*
  • Currency or service is not supported -> confirm allowed currencies/features in your Payok account and in Corefy

Question

Still looking for help connecting your Payok account? Please contact our support team!