Payment Apps
Payment Apps are the core configuration entities in the Salami Payments module. Each app binds a payment provider driver to a set of credentials and settings.
List Payment Apps
Retrieve all payment apps belonging to the authenticated user.
GET /api/pay/apps
Authentication
Requires Bearer token.
Response
{
"data": {
"current_page": 1,
"data": [
{
"id": 1,
"name": "My M-Pesa STK",
"type": "MpesaKeExpress",
"is_live": false,
"dedicated": true,
"parent_app_id": null,
"created_by": 1,
"updated_by": 1,
"created_at": "2026-01-15T10:30:00.000000Z",
"updated_at": "2026-01-15T10:30:00.000000Z"
},
{
"id": 2,
"name": "B2C Disbursements",
"type": "MpesaKeB2C",
"is_live": true,
"dedicated": true,
"parent_app_id": null,
"created_by": 1,
"updated_by": 1,
"created_at": "2026-02-01T08:00:00.000000Z",
"updated_at": "2026-02-01T08:00:00.000000Z"
}
],
"per_page": 15,
"total": 2
}
}
Response Fields
| Field |
Type |
Description |
id |
integer |
Unique app identifier |
name |
string |
Display name |
type |
string |
Driver type identifier |
is_live |
boolean |
Whether the app uses production credentials |
dedicated |
boolean |
Whether this is a dedicated (not shared) app |
parent_app_id |
integer/null |
Parent app for shared configurations |
created_by |
integer |
User ID of the creator |
created_at |
datetime |
Creation timestamp |
Status Codes
| Code |
Description |
200 |
Success |
401 |
Unauthenticated |
Creating Payment Apps
Payment Apps are created through the Salami web dashboard. Navigate to Payments > Apps > Create New App.
Required Fields (All Providers)
| Field |
Type |
Required |
Description |
name |
string |
Yes |
Unique name for the app |
settings |
string |
Yes |
Driver type (e.g., MpesaKeExpress) |
is_live |
boolean |
Yes |
Sandbox (false) or Production (true) |
Driver Types and Configuration Fields
M-Pesa Express (STK Push) -- MpesaKeExpress
| Field |
Type |
Required |
Description |
consumer_key |
string |
Yes |
Safaricom API consumer key |
consumer_secret |
string |
Yes |
Safaricom API consumer secret |
short_code |
string |
Yes |
M-Pesa business short code or paybill number |
passkey |
string |
Yes |
Lipa Na M-Pesa Online passkey |
initiator_name |
string |
Yes |
API initiator username |
security_credential |
string |
Yes |
Encrypted initiator password |
M-Pesa C2B -- MpesaKeC2B
| Field |
Type |
Required |
Description |
consumer_key |
string |
Yes |
Safaricom API consumer key |
consumer_secret |
string |
Yes |
Safaricom API consumer secret |
short_code |
string |
Yes |
Business short code or paybill |
initiator_name |
string |
Yes |
API initiator username |
security_credential |
string |
Yes |
Encrypted initiator password |
M-Pesa B2C -- MpesaKeB2C
| Field |
Type |
Required |
Description |
consumer_key |
string |
Yes |
Safaricom API consumer key |
consumer_secret |
string |
Yes |
Safaricom API consumer secret |
short_code |
string |
Yes |
Business short code |
initiator_name |
string |
Yes |
API initiator username |
security_credential |
string |
Yes |
Encrypted initiator password |
test_phone_number |
string |
Yes |
Phone number for sandbox testing |
M-Pesa B2B -- MpesaKeB2B
| Field |
Type |
Required |
Description |
consumer_key |
string |
Yes |
Safaricom API consumer key |
consumer_secret |
string |
Yes |
Safaricom API consumer secret |
short_code |
string |
Yes |
Business short code |
initiator_name |
string |
Yes |
API initiator username |
security_credential |
string |
Yes |
Encrypted initiator password |
test_phone_number |
string |
Yes |
Short code for sandbox testing |
Airtel Kenya -- AirtelKe
| Field |
Type |
Required |
Description |
business_name |
string |
Yes |
Airtel business/merchant name |
username |
string |
Yes |
Airtel API username |
password |
string |
Yes |
Airtel API password |
Equity Bank Kenya -- EquityBankKe
| Field |
Type |
Required |
Description |
host |
string |
Yes |
Equity API host URL |
consumer_key |
string |
Yes |
API consumer key |
consumer_secret |
string |
Yes |
API consumer secret |
merchant |
string |
Yes |
Merchant identifier |
username |
string |
Yes |
API username |
password |
string |
Yes |
API password |
PayPal IPN -- PaypalIPN
| Field |
Type |
Required |
Description |
email |
string |
Yes |
PayPal account email address |
Pesalink Kenya -- PesalinkKe
| Field |
Type |
Required |
Description |
bankName |
string |
Yes |
Bank name |
acNo |
string |
Yes |
Account number |
acName |
string |
Yes |
Account name |
Kopokopo -- Kopokopo
| Field |
Type |
Required |
Description |
secret |
string |
Yes |
Kopokopo webhook secret |
Shared vs Dedicated Apps
Payment Apps can be either dedicated or shared:
- Dedicated: The app has its own credentials and operates independently.
- Shared: The app references a parent app (
parent_app_id) and shares its credentials. Useful when multiple users or services need to receive callbacks for the same paybill.
Checking App Type
dedicated = true --> Dedicated app (standalone)
dedicated = false AND parent_app_id != null --> Shared app (inherits from parent)
Related Documentation