Initiate S2S
Authorization
Set to Bearer PUBLIC_KEY
Set value to application/json
The public key can be gotten from the 'Settings' page on your Startbutton dashboard.
Post a request to the URL below, where the base URL is determined by the environment you are in.
BaseUrlsPROD : https://api.startbutton.tech
DEV/ Staging: https://api.startbutton.builditdigital.co
Endpoint
POST {{baseurl}}/transaction/initialize/s2s/mobile_money
Here's a sample request below
Required parameters (KES) Optional parameters included (KES)
Copy {
"provider": "mpesa",
"phone": "0710000000",
"email": "kass1-pms@customer.com",
"amount": 3000,
"currency": "KES"
}
Copy {
"provider": "mpesa",
"phone": "+254710000000",
"email": "kass1-pms@customer.com",
"amount": 3000,
"currency": "KES",
"reference": "de432cr4d34e"
}
Required parameters (GHS) Optional parameters included (GHS)
Copy {
"provider": "MTN",
"phone": "0551234987",
"amount": 300000,
"currency": "GHS",
"email": "test-pms@customer.com"
}
Copy {
"provider": "MTN",
"phone": "0551234987",
"amount": 300000,
"currency": "GHS",
"reference": "de432cr4d34e",
"email": "test-pms@customer.com"
}
The amount should be in fractional units.
Here's a sample response
Success (GHS) Success (KES) Failed
Copy {
"success": true,
"message": "Charge attempted, requery to get status",
"data": {
"nextStep": "PIN",
"reference": "610ae86889ee"
}
}
Copy {
"success": true,
"message": "Charge attempted, requery to get status",
"data": {
"nextStep": "PIN",
"reference": "42452be51db0"
}
}
Copy {
"success": false,
"message": "unknown provider"
}
The next step can either be OTP or PIN. If your customer is new to the service, they'll receive an OTP initially. Afterwards, for subsequent transactions, they'll be provided with a PIN.
When it is an OTP; you need to present the User with a screen to enter OTP and then call the endpoint below
OTP Verify
Endpoint
POST {{baseurl}}/transaction/initialize/s2s/mobile_money/otp-verify
Authorization
Set to Bearer PUBLIC_KEY
Here's a sample response
Verify OTP
Copy {
"reference": "610ae86889ee",
"otp": "123456"
}
Here's a sample response
Valid OTP Response Failed OTP Verification
Copy {
"status": true,
"message": "Charge attempted",
"data": {
"status": "requery",
"message": "Confirming payment"
}
}
Copy {
"success": false,
"message": "OTP verification failed",
"data": null
}
However, if the next step is a PIN your users only need to enter their PIN on the prompt on their phone.