Introduction v5.3.1
Powering global payments with secure, enterprise-grade APIs.
This documentation describes the integration procedures and POST protocol usage for e-commerce merchants using the Lipapap Enterprise Payment Platform. Our API implements acquiring payments (purchases) with a robust, secure, and scalable interaction model.
Key Capabilities
- Global Payments: Support for 20+ currencies and alternative payment methods (APMs).
- Recurring & Automation: Tokenization, scheduled payments, and Card2Card transfers.
- Enterprise Security: 3D-Secure, HMAC-SHA256 signatures, and PCI DSS Level 1 compliance.
- Developer Friendly: Clear request/response models, webhooks, and sandbox testing.
Integration Process
Get started in four simple steps.
1. Merchant Registration
Before accessing the Payment Platform, provide the following data to your account manager:
| Data | Description |
|---|---|
IP list | List of IP addresses from which requests will be sent. |
Callback URL | URL for receiving processing result notifications. Max 255 characters. |
Contact email | Email of the person monitoring transactions and refunds. |
After registration, you will receive your credentials:
| Credential | Description |
|---|---|
CLIENT_KEY | Unique UUID to identify your account. |
SECRET_KEY | Private key for signature generation. Keep confidential. |
PAYMENT_URL | Endpoint URL for API requests. |
2. Protocol Mapping
Ensure the S2S CARD protocol is mapped in your account. Payments cannot be processed without proper mapping.
3. API Interaction
Send HTTPS POST requests to PAYMENT_URL with the required parameters. All responses are JSON-encoded.
3D-Secure (3DS) Flow
For 3DS-enabled transactions, the API returns a redirect response. You must redirect the cardholder to the provided redirect_url with the redirect_params using the specified redirect_method (POST/GET). After verification, the cardholder returns to your term_url_3ds.
{
"action": "SALE",
"client_key": "9e48fe5c-7653-824c-71a3-ad155d18ad27",
"order_id": "order-12345",
"order_amount": "99.99",
"order_currency": "USD",
"term_url_3ds": "https://your-site.com/3ds-return",
"hash": "a1b2c3d4..."
}
{
"action": "SALE",
"result": "REDIRECT",
"status": "3DS",
"trans_id": "txn-67890",
"redirect_url": "https://acs.bank.com/3ds",
"redirect_method": "POST",
"redirect_params": { "PaReq": "...", "MD": "..." }
}
4. Possible Actions
| Action | Description |
|---|---|
SALE | Creates a SALE or AUTH transaction. |
CAPTURE | Captures a previously authorized transaction. |
CREDITVOID | Creates a REFUND or REVERSAL. |
RECURRING_SALE | Creates a SALE using stored cardholder data. |
CARD2CARD | Transfers funds between two credit cards. |
GET_TRANS_STATUS | Retrieves the status of a transaction. |
Sale / Auth / Capture
Single Message (SMS) and Dual Message (DMS) transactions.
SALE Request
Use auth=Y for AUTH transactions (DMS). For sub-accounts, specify channel_id.
Request Parameters
| Parameter | Description | Required |
|---|---|---|
action | SALE | Yes |
client_key | Your unique UUID | Yes |
order_id | Your transaction ID (max 255 chars) | Yes |
order_amount | Amount (e.g., 100.99) | Yes |
order_currency | 3-letter currency code (e.g., USD) | Yes |
card_number | Credit card number | Yes* |
card_exp_month | Expiry month (MM) | Yes* |
card_exp_year | Expiry year (YYYY) | Yes* |
card_cvv2 | CVV/CVC2 | Yes |
payer_email | Customer email | Yes |
payer_ip | Customer IP address | Yes |
term_url_3ds | 3DS return URL | Yes |
auth | Y for AUTH only | No |
hash | Signature (Formula 1) | Yes |
* Optional if card_token is provided.
Response (Successful Sale)
{
"action": "SALE",
"result": "SUCCESS",
"status": "SETTLED",
"order_id": "order-12345",
"trans_id": "txn-67890",
"amount": "99.99",
"currency": "USD",
"descriptor": "LIPAPAP*Merchant"
}
{
"action": "SALE",
"result": "DECLINED",
"status": "DECLINED",
"order_id": "order-12345",
"trans_id": "txn-67890",
"decline_reason": "Insufficient funds"
}
CAPTURE Request
Captures a previously authorized transaction (auth=Y).
| Parameter | Description | Required |
|---|---|---|
action | CAPTURE | Yes |
client_key | Your unique UUID | Yes |
trans_id | Platform transaction ID from the AUTH | Yes |
amount | Capture amount (optional, defaults to full amount) | No |
hash | Signature (Formula 2) | Yes |
Alternative Payments (APM)
Mobile money, e-wallets, and local payment methods.
MOMOAPM Request
Processes payments using mobile money and alternative payment methods. Supports 20+ currencies.
payer_phone is valid for the selected country and mobile money provider.
Request Parameters
| Parameter | Description | Required |
|---|---|---|
action | MOMOAPM | Yes |
client_key | Your unique UUID | Yes |
order_id | Your transaction ID | Yes |
order_amount | Amount (e.g., 113.00) | Yes |
order_description | Transaction description | Yes |
payer_phone | Customer phone (e.g., +2547XXXXXXXX) | Yes |
payer_email | Customer email | Yes |
payer_country | 2-letter country code (e.g., KE) | Yes |
term_url_3ds | Return URL after payment | Yes |
timestamp | Unix timestamp (milliseconds) | Yes |
hash | Signature (Formula 1) | Yes |
Supported Currencies
| Currency | Code | Country |
|---|---|---|
| Kenyan Shilling | KES | Kenya |
| Ugandan Shilling | UGX | Uganda |
| Nigerian Naira | NGN | Nigeria |
| Philippine Peso | PHP | Philippines |
| Indian Rupee | INR | India |
| US Dollar | USD | Ecuador |
| Mexican Peso | MXN | Mexico |
| Brazilian Real | BRL | Brazil |
| Ghanaian Cedi | GHS | Ghana |
| Rwandan Franc | RWF | Rwanda |
Sample Response
{
"action": "MOMOAPM",
"result": "REDIRECT",
"status": "REDIRECT",
"order_id": "pay-1643-11001",
"trans_id": "pay-1643-11001",
"amount": "113.00",
"currency": "PHP",
"txMsg": "Transaction successful",
"redirect_url": "https://lipapap.net/pgate/refer.php?token=...",
"redirect_method": "GET"
}
Refund / Reverse
CreditVOID transactions for full or partial refunds.
CREDITVOID Request
Completes a REFUND (full/partial) or REVERSAL transaction.
| Parameter | Description | Required |
|---|---|---|
action | CREDITVOID | Yes |
client_key | Your unique UUID | Yes |
trans_id | Platform transaction ID to refund | Yes |
amount | Refund amount (optional, defaults to full) | No |
hash | Signature (Formula 2) | Yes |
Response
{
"action": "CREDITVOID",
"result": "ACCEPTED",
"order_id": "order-12345",
"trans_id": "txn-67890"
}
{
"action": "CREDITVOID",
"result": "SUCCESS",
"status": "REFUND",
"order_id": "order-12345",
"trans_id": "txn-67890",
"amount": "99.99",
"hash": "a1b2c3d4..."
}
Void / Debit / Credit2Card
Cancel, debit, or transfer funds.
VOID Request
Cancels a previously authorized transaction.
| Parameter | Description | Required |
|---|---|---|
action | VOID | Yes |
client_key | Your unique UUID | Yes |
trans_id | Platform transaction ID to void | Yes |
hash | Signature (Formula 2) | Yes |
DEBIT Request
Transfers funds from a credit card to a merchant's account.
| Parameter | Description | Required |
|---|---|---|
action | DEBIT | Yes |
client_key | Your unique UUID | Yes |
order_id | Your transaction ID | Yes |
order_amount | Amount (e.g., 500.00) | Yes |
card_number | Credit card number | Yes |
card_exp_month | Expiry month | Yes |
card_exp_year | Expiry year | Yes |
payer_ip | Customer IP address | Yes |
hash | Signature (Formula 1) | Yes |
CREDIT2CARD Request
Transfers funds from a merchant's account to a credit card.
| Parameter | Description | Required |
|---|---|---|
action | CREDIT2CARD | Yes |
client_key | Your unique UUID | Yes |
order_id | Your transaction ID | Yes |
order_amount | Amount (e.g., 250.00) | Yes |
card_number | Receiver's credit card number | Yes |
card_exp_month | Receiver's expiry month | Yes |
card_exp_year | Receiver's expiry year | Yes |
payer_ip | Customer IP address | Yes |
hash | Signature (Formula 1) | Yes |
Recurring Sale & Card2Card
Automated payments and card-to-card transfers.
RECURRING_SALE Request
Implements SALE or AUTH transactions using a stored recurring_token from a previous transaction with recurring_init=Y.
| Parameter | Description | Required |
|---|---|---|
action | RECURRING_SALE | Yes |
client_key | Your unique UUID | Yes |
order_id | Your transaction ID | Yes |
order_amount | Amount | Yes |
recurring_token | Token from a previous transaction | Yes |
payer_email | Customer email | Yes |
payer_ip | Customer IP address | Yes |
auth | Y for AUTH only | No |
hash | Signature (Formula 1) | Yes |
CARD2CARD Request
Transfers money between two credit cards.
| Parameter | Description | Required |
|---|---|---|
action | CARD2CARD | Yes |
client_key | Your unique UUID | Yes |
order_id | Your transaction ID | Yes |
order_amount | Amount | Yes |
sender_card_number | Sender's card number | Yes |
sender_card_exp_month | Sender's expiry month | Yes |
sender_card_exp_year | Sender's expiry year | Yes |
sender_card_cvv2 | Sender's CVV | Yes |
receiver_card_number | Receiver's card number | Yes |
payer_ip | Customer IP address | Yes |
term_url_3ds | 3DS return URL | Yes |
hash | Signature (Formula 1) | Yes |
Recurring Schedules
CREATE, PAUSE, RUN, DELETE, and INFO operations.
CREATE_SCHEDULE Request
Creates a recurring payment schedule.
| Parameter | Description | Required |
|---|---|---|
action | CREATE_SCHEDULE | Yes |
client_key | Your unique UUID | Yes |
schedule_id | Unique schedule ID | Yes |
recurring_token | Token from a previous transaction | Yes |
amount | Amount per payment | Yes |
currency | 3-letter currency code | Yes |
start_date | Schedule start date (yyyy-MM-dd) | Yes |
interval | DAILY, WEEKLY, MONTHLY, YEARLY | Yes |
interval_count | Number of intervals between payments | Yes |
hash | Signature (Formula 1) | Yes |
Schedule Management
| Action | Description | Required Params |
|---|---|---|
PAUSE_SCHEDULE | Suspends a schedule | schedule_id |
RUN_SCHEDULE | Resumes a paused schedule | schedule_id |
DELETE_SCHEDULE | Deletes a schedule | schedule_id |
SCHEDULE_INFO | Retrieves schedule details | schedule_id |
DESCHEDULE | Terminates schedule and removes token | schedule_id |
All management actions require client_key, action, schedule_id, and hash (Formula 2).
Transaction Status
Query transaction and order details.
GET_TRANS_STATUS
Retrieves the status of a specific transaction.
| Parameter | Description | Required |
|---|---|---|
action | GET_TRANS_STATUS | Yes |
client_key | Your unique UUID | Yes |
trans_id | Platform transaction ID | Yes |
hash | Signature (Formula 2) | Yes |
GET_TRANS_DETAILS
Retrieves full order details including all associated transactions.
| Parameter | Description | Required |
|---|---|---|
action | GET_TRANS_DETAILS | Yes |
client_key | Your unique UUID | Yes |
order_id | Merchant transaction ID | Yes |
hash | Signature (Formula 2) | Yes |
Status Codes
| Status | Description |
|---|---|
SETTLED | Transaction completed successfully. |
PENDING | Awaiting capture (AUTH transaction). |
DECLINED | Transaction was declined. |
3DS | Awaiting 3D-Secure validation. |
REFUND | Transaction has been refunded. |
REVERSAL | Transaction has been reversed. |
VOID | Transaction has been voided. |
Appendix & Error Codes
Signature formulas, error codes, and testing.
Formula 1: Request Signature
Signature = HMAC-SHA256(
CONCAT(
client_key,
order_id,
order_amount,
order_currency,
order_description,
card_number,
card_exp_month,
card_exp_year,
payer_email,
payer_phone,
payer_ip,
secret_key
),
secret_key
)
Non-required parameters not provided should be replaced with an empty string.
Formula 2: Response/Callback Signature
Signature = HMAC-SHA256(
CONCAT(
action,
result,
status,
order_id,
trans_id,
trans_date,
amount,
currency,
decline_reason,
secret_key
),
secret_key
)
If decline_reason is not present, use an empty string.
Error Codes
| Code | Description |
|---|---|
100 | Invalid client_key |
101 | Invalid signature |
102 | Missing required parameter |
200 | Transaction not found |
202 | Transaction declined by issuer |
300 | Invalid card details |
302 | Insufficient funds |
500 | Token not found |
600 | System error — contact support |
Testing
| Card Number | Expiry | Result |
|---|---|---|
4111 1111 1111 1111 | 01/2026 | Successful SALE → SETTLED |
4000 0000 0000 0002 | 01/2026 | Declined → DECLINED |
5555 5555 5555 4444 | 01/2026 | 3DS Required → REDIRECT |