PayFast Payment Form API
Standard redirect-based payment form integration
Standard redirect-based payment form integration
openapi: 3.1.0
info:
title: PayFast Credit Card Transactions Payment Form API
description: 'South African payment gateway providing REST APIs for online payment processing, subscription billing, tokenized recurring card payments, onsite checkout, and merchant refunds. Trusted by 80,000+ South African businesses and certified PCI-DSS Level 1.
'
version: v1
contact:
name: PayFast Developer Support
url: https://support.payfast.help
license:
name: Proprietary
url: https://payfast.io
servers:
- url: https://api.payfast.co.za/v1
description: Production API server
- url: https://sandbox.payfast.co.za/v1
description: Sandbox / test server
security:
- merchantAuth: []
tags:
- name: Payment Form
description: Standard redirect-based payment form integration
paths:
/eng/process:
post:
operationId: initiatePayment
summary: Initiate a standard payment (form redirect)
description: 'Standard payment form POST to initiate a PayFast redirect checkout. The customer is redirected to PayFast to complete payment. This endpoint is on the www.payfast.co.za (or sandbox.payfast.co.za) domain.
'
tags:
- Payment Form
servers:
- url: https://www.payfast.co.za
description: Production payment form
- url: https://sandbox.payfast.co.za
description: Sandbox payment form
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PaymentFormRequest'
responses:
'302':
description: Redirects the customer to the PayFast payment page
components:
schemas:
PaymentFormRequest:
type: object
required:
- merchant_id
- merchant_key
- amount
- item_name
- signature
properties:
merchant_id:
type: string
description: PayFast merchant ID
example: '10000100'
merchant_key:
type: string
description: PayFast merchant key
example: 46f0cd694581a
return_url:
type: string
format: uri
description: URL to redirect to after successful payment
example: https://www.example.com/return
cancel_url:
type: string
format: uri
description: URL to redirect to if customer cancels
example: https://www.example.com/cancel
notify_url:
type: string
format: uri
description: ITN notification URL
example: https://www.example.com/notify
name_first:
type: string
description: Customer first name
example: Jane
name_last:
type: string
description: Customer last name
example: Smith
email_address:
type: string
format: email
description: Customer email address
example: jane@example.com
cell_number:
type: string
description: Customer cell number
example: '+27821234567'
m_payment_id:
type: string
description: Merchant payment reference ID (up to 100 chars)
maxLength: 100
example: order-1234
amount:
type: string
description: Payment amount formatted to 2 decimal places (ZAR)
example: '99.00'
item_name:
type: string
description: Name of item being purchased
maxLength: 100
example: Premium subscription
item_description:
type: string
description: Description of item
maxLength: 255
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
description: Custom string field 1
maxLength: 255
custom_str2:
type: string
description: Custom string field 2
maxLength: 255
custom_str3:
type: string
description: Custom string field 3
maxLength: 255
custom_str4:
type: string
description: Custom string field 4
maxLength: 255
custom_str5:
type: string
description: Custom string field 5
maxLength: 255
email_confirmation:
type: integer
description: Send confirmation email (1=yes)
enum:
- 0
- 1
example: 1
confirmation_address:
type: string
format: email
description: Email address for confirmation
example: merchant@example.com
currency:
type: string
description: Transaction currency (default ZAR)
default: ZAR
example: ZAR
payment_method:
type: string
description: Restrict payment to a specific method (cc, dc, ef, etc.)
example: cc
subscription_type:
type: integer
description: Subscription type (1=recurring billing, 2=tokenization)
enum:
- 1
- 2
example: 1
billing_date:
type: string
format: date
description: First billing date for subscriptions (YYYY-MM-DD)
example: '2026-07-01'
recurring_amount:
type: string
description: Recurring billing amount (ZAR, 2 decimal places)
example: '99.00'
frequency:
type: integer
description: 'Billing frequency (3=monthly, 4=quarterly, 5=biannually, 6=annually)
'
enum:
- 3
- 4
- 5
- 6
example: 3
cycles:
type: integer
description: Number of billing cycles (0=indefinite)
example: 12
subscription_notify_email:
type: integer
description: Notify merchant of subscription updates via email (1=yes)
enum:
- 0
- 1
example: 1
subscription_notify_webhook:
type: integer
description: Notify merchant of subscription updates via webhook (1=yes)
enum:
- 0
- 1
example: 1
subscription_notify_buyer:
type: integer
description: Notify buyer of subscription updates (1=yes)
enum:
- 0
- 1
example: 1
signature:
type: string
description: MD5 signature of the payment parameters
example: ad3e6c84d5e5f374a3a0431bc5acbc90
securitySchemes:
merchantAuth:
type: apiKey
in: header
name: merchant-id
description: 'PayFast API authentication uses an MD5 signature derived from the merchant ID, passphrase, timestamp, and request data. Required headers include merchant-id, version, timestamp, and signature.
'