curl --request GET \
--url https://sandbox.api.afriex.com/api/v1/sme-registration/status \
--header 'x-api-key: <api-key>'import requests
url = "https://sandbox.api.afriex.com/api/v1/sme-registration/status"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://sandbox.api.afriex.com/api/v1/sme-registration/status', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.api.afriex.com/api/v1/sme-registration/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox.api.afriex.com/api/v1/sme-registration/status"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sandbox.api.afriex.com/api/v1/sme-registration/status")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.afriex.com/api/v1/sme-registration/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"onboardingRequestId": "<string>",
"status": "OTP_PENDING",
"reviewStatus": "SUBMITTED",
"rejectReasons": [
"<string>"
],
"isReviewStatusStale": true
}
}{
"code": "<string>",
"error": "<string>",
"details": {
"errorMessage": "<string>",
"friendlyMessage": "<string>",
"data": {
"customerId": "<string>"
}
}
}Get SME Registration Status
Returns the most recent SME registration status for the authenticated business. Once the registration has been submitted, the response also includes the latest review outcome. Requires an API key with admin permission.
curl --request GET \
--url https://sandbox.api.afriex.com/api/v1/sme-registration/status \
--header 'x-api-key: <api-key>'import requests
url = "https://sandbox.api.afriex.com/api/v1/sme-registration/status"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://sandbox.api.afriex.com/api/v1/sme-registration/status', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.api.afriex.com/api/v1/sme-registration/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox.api.afriex.com/api/v1/sme-registration/status"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sandbox.api.afriex.com/api/v1/sme-registration/status")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.afriex.com/api/v1/sme-registration/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"onboardingRequestId": "<string>",
"status": "OTP_PENDING",
"reviewStatus": "SUBMITTED",
"rejectReasons": [
"<string>"
],
"isReviewStatusStale": true
}
}{
"code": "<string>",
"error": "<string>",
"details": {
"errorMessage": "<string>",
"friendlyMessage": "<string>",
"data": {
"customerId": "<string>"
}
}
}onboardingRequestId and status come back null.Review outcomes
reviewStatus is present only after SUBMIT. Dedicated KES virtual accounts under your entity are issued only after APPROVED.
| Value | Meaning |
|---|---|
SUBMITTED | Registration has been received and is waiting to be picked up for review. |
PROCESSING | The review is in progress. |
APPROVED | Approved. Dedicated KES virtual accounts will now be issued under your entity. |
REJECTED | Rejected. See rejectReasons[] for the human-readable reasons. |
CLOSED | The reviewing party marked the account as closed. Contact support. |
UNDER_REVIEW | Held for a manual review; no action from you until the outcome flips. |
UNKNOWN | Forward-compatibility slot for any outcome Afriex has not mapped yet. Treat as “no decision yet” and poll again later. |
REJECTED, rejectReasons[] carries human-readable reasons you can surface to the operator.
reviewStatus values may grow over time as new outcomes are surfaced. Existing values will not change meaning; handle unfamiliar values by falling back to UNKNOWN.Freshness
The response may also includeisReviewStatusStale: true. That flag means Afriex could not reach the review provider on this read, so the reviewStatus reflects the last known value (or UNKNOWN if none is cached) rather than the current one. Poll again later for a fresh read; the field is absent when the read succeeded.Authorizations
Static business API key issued from the dashboard. A business can provision multiple API keys, each scoped to a configurable set of permissions (e.g. read transactions, create deposits, etc). Permissions are chosen per key at creation time in the dashboard and may be revoked by deleting the key. Requests made with a key that does not include the permission required by the target endpoint is rejected with a 401 Unauthorized response, the same response an unrecognised, malformed or revoked key returns. The API does not distinguish the two cases on the wire. Manage your keys and their permissions under Developer → API keys in the dashboard.
Headers
API version in ISO 8601 format. The only supported version is 2026-05-18, which is also the default when the header is omitted. Any other value is rejected with a 400 Bad Request.
Response
Current SME registration status.
Show child attributes
Show child attributes
