Skip to main content
POST
/
payments-init
/
initiate
/
public-payin
Initiate a payment (API key)
curl --request POST \
  --url https://prod-api.pcxpay.com/v1/payments-init/initiate/public-payin \
  --header 'Authorization: <authorization>' \
  --header 'Content-Type: application/json' \
  --header 'X-Api-Key: <x-api-key>' \
  --data '
{
  "amount": 123,
  "target_amount": 123,
  "currency": "KES",
  "target_currency": "KES",
  "country": "KE",
  "direction": "payin",
  "client_reference": "<string>",
  "description": "<string>",
  "payer_details": {
    "name": "<string>",
    "email": "jsmith@example.com",
    "phone": "<string>"
  },
  "mobile_money_details": {
    "provider": "<string>",
    "phone_number": "<string>"
  },
  "bank_details": {
    "account_name": "<string>",
    "account_number": "<string>",
    "bank_name": "<string>",
    "country": "<string>",
    "bank_code": "<string>"
  },
  "bank_account": {
    "account_number": "<string>",
    "bank_code": "<string>",
    "bank_name": "<string>"
  },
  "beneficiary_id": "<string>",
  "return_url": "<string>",
  "metadata": {}
}
'
{
  "statusCode": 200,
  "response": {
    "success": true,
    "provider_payment_id": "<string>",
    "payment_id": "<string>",
    "status": "<string>",
    "redirect_url": "<string>",
    "payment_instructions": "<string>",
    "expires_at": "2023-11-07T05:31:56Z"
  },
  "transaction_id": "<string>"
}

Headers

Authorization
string
default:NONE
required

Bearer JWT for user-facing flows (Bearer eyJraWQ...), or the literal string NONE when authenticating via API key.

Example:

"Bearer eyJraWQ..."

X-Api-Key
string
default:NONE
required

API key for server-to-server flows, or the literal string NONE when authenticating via JWT.

Example:

"pcx_abc123_xxxx"

Body

application/json

Same as PaymentInitiationRequest but org_id and user_id are injected from the authenticated API key — do not include them. Only same-currency flows are supported on this endpoint.

amount
number<float>
required
target_amount
number<float>
required

Must equal amount (same-currency only).

currency
string
required
Example:

"KES"

target_currency
string
required

Must equal currency.

Example:

"KES"

country
string
required
Example:

"KE"

payment_method
enum<string>
required
Available options:
mobile_money,
bank_transfer,
card
direction
enum<string>
default:payin
Available options:
payin,
payout
client_reference
string | null
description
string | null
payer_details
object
mobile_money_details
object
bank_details
object
bank_account
object
beneficiary_id
string | null
return_url
string<uri> | null
metadata
object

Response

Payment initiated

statusCode
integer
Example:

200

response
object
transaction_id
string