PayFast · Schema

PayFast Payment Form Request

Schema for the PayFast standard redirect payment form POST fields, including subscription and tokenization parameters.

PaymentsPayment GatewaySouth AfricaSubscriptionsRecurring BillingTokenizationInstant EFTQR Code PaymentsRefundsFintech

Properties

Name Type Description
merchant_id string PayFast merchant ID assigned during registration
merchant_key string PayFast merchant key assigned during registration
return_url string URL to redirect the customer to after a successful payment
cancel_url string URL to redirect the customer to if they cancel the payment
notify_url string Server-to-server ITN (Instant Transaction Notification) URL
name_first string Customer first name
name_last string Customer last name
email_address string Customer email address
cell_number string Customer cell phone number
m_payment_id string Merchant-assigned payment reference ID
amount string Payment amount in ZAR, formatted to exactly 2 decimal places
item_name string Name of the item or service being purchased
item_description string Additional description of the item
custom_int1 integer Custom integer field 1
custom_int2 integer Custom integer field 2
custom_int3 integer Custom integer field 3
custom_int4 integer Custom integer field 4
custom_int5 integer Custom integer field 5
custom_str1 string Custom string field 1
custom_str2 string Custom string field 2
custom_str3 string Custom string field 3
custom_str4 string Custom string field 4
custom_str5 string Custom string field 5
email_confirmation integer Send confirmation email to merchant (1=yes, 0=no)
confirmation_address string Email address to receive payment confirmation
currency string Transaction currency — currently only ZAR is supported
payment_method string Restrict the payment to a specific method (cc, dc, ef, mp, sc, mc, cd, vc)
subscription_type integer Subscription type: 1=recurring billing, 2=tokenization (future adhoc charges)
billing_date string First billing date for recurring subscription (YYYY-MM-DD)
recurring_amount string Amount to charge on each recurring billing cycle (ZAR)
frequency integer Billing frequency: 3=monthly, 4=quarterly, 5=biannually, 6=annually
cycles integer Number of billing cycles (0=indefinite)
subscription_notify_email integer Notify merchant of subscription events via email
subscription_notify_webhook integer Notify merchant of subscription events via webhook
subscription_notify_buyer integer Notify buyer of subscription events
signature string MD5 signature of sorted, URL-encoded payment parameters
View JSON Schema on GitHub

JSON Schema

payfast-payment-form.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://api-evangelist.github.io/payfast/json-schema/payfast-payment-form.json",
  "title": "PayFast Payment Form Request",
  "description": "Schema for the PayFast standard redirect payment form POST fields, including subscription and tokenization parameters.",
  "type": "object",
  "required": ["merchant_id", "merchant_key", "amount", "item_name", "signature"],
  "properties": {
    "merchant_id": {
      "type": "string",
      "description": "PayFast merchant ID assigned during registration",
      "example": "10000100"
    },
    "merchant_key": {
      "type": "string",
      "description": "PayFast merchant key assigned during registration",
      "example": "46f0cd694581a"
    },
    "return_url": {
      "type": "string",
      "format": "uri",
      "description": "URL to redirect the customer to after a successful payment",
      "example": "https://www.example.com/return"
    },
    "cancel_url": {
      "type": "string",
      "format": "uri",
      "description": "URL to redirect the customer to if they cancel the payment",
      "example": "https://www.example.com/cancel"
    },
    "notify_url": {
      "type": "string",
      "format": "uri",
      "description": "Server-to-server ITN (Instant Transaction Notification) URL",
      "example": "https://www.example.com/notify"
    },
    "name_first": {
      "type": "string",
      "maxLength": 100,
      "description": "Customer first name",
      "example": "Jane"
    },
    "name_last": {
      "type": "string",
      "maxLength": 100,
      "description": "Customer last name",
      "example": "Smith"
    },
    "email_address": {
      "type": "string",
      "format": "email",
      "description": "Customer email address",
      "example": "[email protected]"
    },
    "cell_number": {
      "type": "string",
      "description": "Customer cell phone number",
      "example": "+27821234567"
    },
    "m_payment_id": {
      "type": "string",
      "maxLength": 100,
      "description": "Merchant-assigned payment reference ID",
      "example": "order-1234"
    },
    "amount": {
      "type": "string",
      "pattern": "^\\d+\\.\\d{2}$",
      "description": "Payment amount in ZAR, formatted to exactly 2 decimal places",
      "example": "99.00"
    },
    "item_name": {
      "type": "string",
      "maxLength": 100,
      "description": "Name of the item or service being purchased",
      "example": "Premium subscription"
    },
    "item_description": {
      "type": "string",
      "maxLength": 255,
      "description": "Additional description of the item",
      "example": "Monthly premium plan"
    },
    "custom_int1": { "type": "integer", "description": "Custom integer field 1" },
    "custom_int2": { "type": "integer", "description": "Custom integer field 2" },
    "custom_int3": { "type": "integer", "description": "Custom integer field 3" },
    "custom_int4": { "type": "integer", "description": "Custom integer field 4" },
    "custom_int5": { "type": "integer", "description": "Custom integer field 5" },
    "custom_str1": { "type": "string", "maxLength": 255, "description": "Custom string field 1" },
    "custom_str2": { "type": "string", "maxLength": 255, "description": "Custom string field 2" },
    "custom_str3": { "type": "string", "maxLength": 255, "description": "Custom string field 3" },
    "custom_str4": { "type": "string", "maxLength": 255, "description": "Custom string field 4" },
    "custom_str5": { "type": "string", "maxLength": 255, "description": "Custom string field 5" },
    "email_confirmation": {
      "type": "integer",
      "enum": [0, 1],
      "description": "Send confirmation email to merchant (1=yes, 0=no)",
      "example": 1
    },
    "confirmation_address": {
      "type": "string",
      "format": "email",
      "description": "Email address to receive payment confirmation",
      "example": "[email protected]"
    },
    "currency": {
      "type": "string",
      "default": "ZAR",
      "description": "Transaction currency — currently only ZAR is supported",
      "example": "ZAR"
    },
    "payment_method": {
      "type": "string",
      "description": "Restrict the payment to a specific method (cc, dc, ef, mp, sc, mc, cd, vc)",
      "example": "cc"
    },
    "subscription_type": {
      "type": "integer",
      "enum": [1, 2],
      "description": "Subscription type: 1=recurring billing, 2=tokenization (future adhoc charges)"
    },
    "billing_date": {
      "type": "string",
      "format": "date",
      "description": "First billing date for recurring subscription (YYYY-MM-DD)",
      "example": "2026-07-01"
    },
    "recurring_amount": {
      "type": "string",
      "pattern": "^\\d+\\.\\d{2}$",
      "description": "Amount to charge on each recurring billing cycle (ZAR)",
      "example": "99.00"
    },
    "frequency": {
      "type": "integer",
      "enum": [3, 4, 5, 6],
      "description": "Billing frequency: 3=monthly, 4=quarterly, 5=biannually, 6=annually",
      "example": 3
    },
    "cycles": {
      "type": "integer",
      "minimum": 0,
      "description": "Number of billing cycles (0=indefinite)",
      "example": 12
    },
    "subscription_notify_email": {
      "type": "integer",
      "enum": [0, 1],
      "description": "Notify merchant of subscription events via email"
    },
    "subscription_notify_webhook": {
      "type": "integer",
      "enum": [0, 1],
      "description": "Notify merchant of subscription events via webhook"
    },
    "subscription_notify_buyer": {
      "type": "integer",
      "enum": [0, 1],
      "description": "Notify buyer of subscription events"
    },
    "signature": {
      "type": "string",
      "pattern": "^[a-f0-9]{32}$",
      "description": "MD5 signature of sorted, URL-encoded payment parameters",
      "example": "ad3e6c84d5e5f374a3a0431bc5acbc90"
    }
  },
  "additionalProperties": false
}