MENU navbar-image

Introduction

This documentation aims to provide all the information you need to work with our API.

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve your API key and secret by visiting the developer section in your account.

Authentication

Authenticate the user and issue a token.

Example request:
curl --request POST \
    "https://zaylinks.com/api/authenticate" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"client_id\": \"et\",
    \"secret_key\": \"molestiae\"
}"
const url = new URL(
    "https://zaylinks.com/api/authenticate"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "client_id": "et",
    "secret_key": "molestiae"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/authenticate';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'client_id' => 'et',
            'secret_key' => 'molestiae',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/authenticate'
payload = {
    "client_id": "et",
    "secret_key": "molestiae"
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Authentication successful.",
    "access_token": "your_access_token_here"
}
 

Example response (401):


{
    "status": "error",
    "message": "The credentials you supplied do not match our record."
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "client_id": "The client id field is required.",
        "secret_key": "The secret key field is required."
    }
}
 

Request      

POST api/authenticate

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

client_id   string   

Example: et

secret_key   string   

Example: molestiae

Airtime

Airtime Networks

requires authentication

Example request:
curl --request GET \
    --get "https://zaylinks.com/api/v1/airtime-networks" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://zaylinks.com/api/v1/airtime-networks"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/airtime-networks';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/airtime-networks'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Data fetched successfully",
    "data": [
        {
            "name": "9mobile",
            "serviceID": "9mobile"
        },
        {
            "name": "Airtel",
            "serviceID": "airtel"
        },
        {
            "name": "Glo",
            "serviceID": "glo"
        },
        {
            "name": "Mtn",
            "serviceID": "mtn"
        },
        {
            "name": "Smile",
            "serviceID": "smile"
        }
    ]
}
 

Request      

GET api/v1/airtime-networks

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Vend Airtime VTU

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/airtime" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"mtn\",
    \"amount\": 100,
    \"recipient\": \"0123456789\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/airtime"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "mtn",
    "amount": 100,
    "recipient": "0123456789"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/airtime';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'mtn',
            'amount' => 100,
            'recipient' => '0123456789',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/airtime'
payload = {
    "serviceID": "mtn",
    "amount": 100,
    "recipient": "0123456789"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200, completed):


{
    "status": "completed",
    "message": "Transaction successful",
    "data": {
        "type": "Airtime Purchase",
        "service": "Mtn",
        "serviceID": "mtn",
        "amount": "100",
        "amount_payable": "100.00",
        "recipient": {
            "mobile": "08161144693"
        },
        "reference": "20241106161127AQ7CZ0LNVHQB",
        "api_response": "Airtime Purchase of Mtn ₦100 for 08161144693 was successful. "
    }
}
 

Example response (200, pending):


{
    "status": "pending",
    "message": "Transaction pending",
    "data": {
        "type": "Airtime Purchase",
        "service": "Mtn",
        "serviceID": "mtn",
        "amount": "100",
        "amount_payable": "100.00",
        "recipient": {
            "mobile": "08161144693"
        },
        "reference": "20241106161127AQ7CZ0LNVHQB",
        "api_response": "Airtime Purchase of Mtn ₦100 for 08161144693 was is currently being processed. Please check back after a while. "
    }
}
 

Example response (200, failed):


{
    "status": "failed",
    "message": "Transaction failed",
    "data": {
        "type": "Airtime Purchase",
        "service": "Mtn",
        "serviceID": "mtn",
        "amount": "100",
        "amount_payable": "100.00",
        "recipient": {
            "mobile": "08161144693"
        },
        "reference": "20241106161127AQ7CZ0LNVHQB",
        "api_response": "Airtime Purchase of Mtn ₦100 for 08161144693 failed. "
    }
}
 

Example response (403):


{
    "status": "error",
    "message": "Mtn Vending service currently unavailable."
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required.",
        "amount": "The amount field is required.",
        "recipient": "The recipient field is required."
    }
}
 

Request      

POST api/v1/airtime

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the airtime network. Example: mtn

amount   integer   

The amount to be purchased. Example: 100

recipient   numeric   

The phone number of the recipient. Example: 0123456789

Airtime To Cash

Airtime To Cash Networks

requires authentication

Example request:
curl --request GET \
    --get "https://zaylinks.com/api/v1/a2cash-networks" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://zaylinks.com/api/v1/a2cash-networks"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/a2cash-networks';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/a2cash-networks'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Data fetched successfully",
    "data": [
        {
            "name": "9mobile",
            "serviceID": "9mobile-a2c"
        },
        {
            "name": "Airtel",
            "serviceID": "airtel-a2c"
        },
        {
            "name": "Glo",
            "serviceID": "glo-a2c"
        },
        {
            "name": "Mtn",
            "serviceID": "mtn-a2c"
        }
    ]
}
 

Request      

GET api/v1/a2cash-networks

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Send / Request OTP

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/airtime-to-cash/request-otp" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"mtn-a2c\",
    \"sender_number\": \"0123456789\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/airtime-to-cash/request-otp"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "mtn-a2c",
    "sender_number": "0123456789"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/airtime-to-cash/request-otp';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'mtn-a2c',
            'sender_number' => '0123456789',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/airtime-to-cash/request-otp'
payload = {
    "serviceID": "mtn-a2c",
    "sender_number": "0123456789"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "status": "success",
    "message": "A verification otp has been resent sent to 08161144693",
    "identifier": "FPIGMV8U6R6U5W11N7MQPB1ZJGPRAKY7Z13304A242ECE43"
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required.",
        "sender_number": "The sender number field is required."
    }
}
 

Request      

POST api/v1/airtime-to-cash/request-otp

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the airtime network. Example: mtn-a2c

sender_number   numeric   

The phone number of the sender. Example: 0123456789

Verify OTP

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/airtime-to-cash/verify-otp" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"mtn-a2c\",
    \"identifier\": \"quasi\",
    \"otp\": \"565722\",
    \"identifer\": \"FPIGMV8U6R6U5W11N7MQPB1ZJGPRAKY7Z13304A2\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/airtime-to-cash/verify-otp"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "mtn-a2c",
    "identifier": "quasi",
    "otp": "565722",
    "identifer": "FPIGMV8U6R6U5W11N7MQPB1ZJGPRAKY7Z13304A2"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/airtime-to-cash/verify-otp';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'mtn-a2c',
            'identifier' => 'quasi',
            'otp' => '565722',
            'identifer' => 'FPIGMV8U6R6U5W11N7MQPB1ZJGPRAKY7Z13304A2',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/airtime-to-cash/verify-otp'
payload = {
    "serviceID": "mtn-a2c",
    "identifier": "quasi",
    "otp": "565722",
    "identifer": "FPIGMV8U6R6U5W11N7MQPB1ZJGPRAKY7Z13304A2"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Otp Validated Successfully for 08161144693",
    "tariffPlan": "Pulse",
    "tariffType": "Prepaid",
    "sessionId": "MV355OUH8T89I0KSVE4IPJVLV3DAANCINRW2DJ7UYL4ZWY1LWFDN1JD7",
    "airtimeBalance": "158.31"
}
 

Example response (403):


{
    "status": "error",
    "message": "Wrong phone number or verification code."
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required.",
        "identifier": "The identifier field is required.",
        "otp": "The otp field is required."
    }
}
 

Request      

POST api/v1/airtime-to-cash/verify-otp

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the airtime network. Example: mtn-a2c

identifier   string   

Example: quasi

otp   numeric   

The otp sent to the sender number. Example: 565722

identifer   string   

The identifier returned in the previous endpoint. Example: FPIGMV8U6R6U5W11N7MQPB1ZJGPRAKY7Z13304A2

Send Airtime

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/airtime-to-cash/send-airtime" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"mtn-a2c\",
    \"sender_number\": \"0123456789\",
    \"amount\": \"500\",
    \"airtime_share_pin\": \"1234\",
    \"sessionId\": \"FPIGMV8U6R6U5W11N7MQPB1ZJGPRAKY7Z13304A2\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/airtime-to-cash/send-airtime"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "mtn-a2c",
    "sender_number": "0123456789",
    "amount": "500",
    "airtime_share_pin": "1234",
    "sessionId": "FPIGMV8U6R6U5W11N7MQPB1ZJGPRAKY7Z13304A2"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/airtime-to-cash/send-airtime';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'mtn-a2c',
            'sender_number' => '0123456789',
            'amount' => '500',
            'airtime_share_pin' => '1234',
            'sessionId' => 'FPIGMV8U6R6U5W11N7MQPB1ZJGPRAKY7Z13304A2',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/airtime-to-cash/send-airtime'
payload = {
    "serviceID": "mtn-a2c",
    "sender_number": "0123456789",
    "amount": "500",
    "airtime_share_pin": "1234",
    "sessionId": "FPIGMV8U6R6U5W11N7MQPB1ZJGPRAKY7Z13304A2"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200, completed):


{
    "status": "completed",
    "message": "Transaction successful",
    "data": {
        "type": "Airtime To Cash",
        "service": "Mtn",
        "serviceID": "mtn-a2c",
        "amount": "245",
        "sender_number": "08161144693",
        "reference": "20241106161223NYJWDYUAYWBF",
        "api_response": "Airtime To Cash Funding of Mtn ₦100 from 08161144693 was successful. "
    }
}
 

Example response (200, pending):


{
    "status": "pending",
    "message": "Transaction pending",
    "data": {
        "type": "Airtime To Cash",
        "service": "Mtn",
        "serviceID": "mtn-a2c",
        "amount": "245",
        "sender_number": "08161144693",
        "reference": "20241106161223NYJWDYUAYWBF",
        "api_response": "Airtime To Cash Funding of Mtn ₦100 from 08161144693 is currently being processed. Please check back after a while.. "
    }
}
 

Example response (200, failed):


{
    "status": "failed",
    "message": "Transaction failed",
    "data": {
        "type": "Airtime To Cash",
        "service": "Mtn",
        "serviceID": "mtn-a2c",
        "amount": "245",
        "sender_number": "08161144693",
        "reference": "20241106161223NYJWDYUAYWBF",
        "api_response": "Airtime To Cash Funding of Mtn ₦100 from 08161144693 failed. "
    }
}
 

Example response (403):


{
    "status": "error",
    "message": "Wrong phone number or verification code."
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required.",
        "sender_number": "The sender number field is required.",
        "amount": "The amount field is required.",
        "airtime_share_pin": "The airtime share pin field is required.",
        "sessionId": "The session id field is required."
    }
}
 

Request      

POST api/v1/airtime-to-cash/send-airtime

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the airtime network. Example: mtn-a2c

sender_number   numeric   

The phone number of the sender. Example: 0123456789

amount   numeric   

The airtime value to share. Example: 500

airtime_share_pin   numeric   

The share pin of the sender number. Example: 1234

sessionId   string   

The sessionId returned in the previous endpoint. Example: FPIGMV8U6R6U5W11N7MQPB1ZJGPRAKY7Z13304A2

Cable

Cable Services

requires authentication

Example request:
curl --request GET \
    --get "https://zaylinks.com/api/v1/cable-services" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://zaylinks.com/api/v1/cable-services"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/cable-services';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/cable-services'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Data fetched successfully",
    "data": [
        {
            "name": "Dstv",
            "serviceID": "dstv"
        },
        {
            "name": "Gotv",
            "serviceID": "gotv"
        },
        {
            "name": "Showmax",
            "serviceID": "showmax"
        },
        {
            "name": "Startimes",
            "serviceID": "startimes"
        }
    ]
}
 

Request      

GET api/v1/cable-services

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Cable Plans

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/cable-plans" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"dstv\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/cable-plans"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "dstv"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/cable-plans';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'dstv',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/cable-plans'
payload = {
    "serviceID": "dstv"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Data fetched successfully",
    "data": [
        {
            "planName": "Dstv Padi",
            "planId": 1,
            "cableType": "Dstv",
            "serviceID": "dstv",
            "price": "1850",
            "status": "active"
        },
        {
            "planName": "Dstv Yanga",
            "planId": 2,
            "cableType": "Dstv",
            "serviceID": "dstv",
            "price": "2565",
            "status": "active"
        }
    ]
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required."
    }
}
 

Request      

POST api/v1/cable-plans

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the cable. Example: dstv

Verify Smart Card Number

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/verify-smart-card-number" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"dstv\",
    \"smartCardNumber\": \"0123456789\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/verify-smart-card-number"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "dstv",
    "smartCardNumber": "0123456789"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/verify-smart-card-number';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'dstv',
            'smartCardNumber' => '0123456789',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/verify-smart-card-number'
payload = {
    "serviceID": "dstv",
    "smartCardNumber": "0123456789"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "status": "success",
    "customerName": "Testermetri",
    "currentBouquet": "DStv  Compact N7900 + ExtraView Access N2,500"
}
 

Example response (403):


{
    "status": "error",
    "message": "Please check the Smartcard Number and Try Again"
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required.",
        "smartCardNumber": "The smart card number field is required."
    }
}
 

Request      

POST api/v1/verify-smart-card-number

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the electricity. Example: dstv

smartCardNumber   numeric   

The meter number. Example: 0123456789

Vend Cable

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/cable" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"dstv\",
    \"planId\": 2,
    \"smartCardNumber\": 123456789,
    \"subscriptionType\": \"renew, change\",
    \"quantity\": 1,
    \"phoneNumber\": \"0123456789\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/cable"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "dstv",
    "planId": 2,
    "smartCardNumber": 123456789,
    "subscriptionType": "renew, change",
    "quantity": 1,
    "phoneNumber": "0123456789"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/cable';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'dstv',
            'planId' => 2,
            'smartCardNumber' => 123456789,
            'subscriptionType' => 'renew, change',
            'quantity' => 1,
            'phoneNumber' => '0123456789',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/cable'
payload = {
    "serviceID": "dstv",
    "planId": 2,
    "smartCardNumber": 123456789,
    "subscriptionType": "renew, change",
    "quantity": 1,
    "phoneNumber": "0123456789"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200, completed):


{
    "status": "completed",
    "message": "Transaction successful",
    "data": {
        "type": "Cable Purchase",
        "service": "Dstv",
        "serviceID": "dstv",
        "plan": {
            "planName": "Dstv Padi",
            "planId": 1,
            "serviceID": "dstv"
        },
        "recipient": {
            "smart_card_number": "1212121212",
            "meter_type": null,
            "name": "Testermetri",
            "previousBouquet": "DStv  Compact N7900 + ExtraView Access N2,500"
        },
        "subscription_type": "renew",
        "quantity": "1",
        "amount": 1850,
        "amount_payable": 1850,
        "phone_number": "08161144693",
        "reference": "20241108144552JGAYIWTU7NTY",
        "api_response": "Cable Purchase of Dstv Dstv Padi for 1212121212 (Testermetri) was successful. "
    }
}
 

Example response (200, pending):


{
    "status": "pending",
    "message": "Transaction pending",
    "data": {
        "type": "Cable Purchase",
        "service": "Dstv",
        "serviceID": "dstv",
        "plan": {
            "planName": "Dstv Padi",
            "planId": 1,
            "serviceID": "dstv"
        },
        "recipient": {
            "smart_card_number": "1212121212",
            "meter_type": null,
            "name": "Testermetri",
            "previousBouquet": "DStv  Compact N7900 + ExtraView Access N2,500"
        },
        "subscription_type": "renew",
        "quantity": "1",
        "amount": 1850,
        "amount_payable": 1850,
        "phone_number": "08161144693",
        "reference": "20241108144552JGAYIWTU7NTY",
        "api_response": "Cable Purchase of Dstv Dstv Padi for 1212121212 (Testermetri) is currently being processed. Please check back after a while.. "
    }
}
 

Example response (200, failed):


{
    "status": "failed",
    "message": "Transaction failed",
    "data": {
        "type": "Cable Purchase",
        "service": "Dstv",
        "serviceID": "dstv",
        "plan": {
            "planName": "Dstv Padi",
            "planId": 1,
            "serviceID": "dstv"
        },
        "recipient": {
            "smart_card_number": "1212121212",
            "meter_type": null,
            "name": "Testermetri",
            "previousBouquet": "DStv  Compact N7900 + ExtraView Access N2,500"
        },
        "subscription_type": "renew",
        "quantity": "1",
        "amount": 1850,
        "amount_payable": 1850,
        "phone_number": "08161144693",
        "reference": "20241108144552JGAYIWTU7NTY",
        "api_response": "Cable Purchase of Dstv Dstv Padi for 1212121212 (Testermetri) failed. "
    }
}
 

Example response (403):


{
    "status": "error",
    "message": "DSTV Vending service currently unavailable."
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required.",
        "planId": "The plan id field is required.",
        "smartCardNumber": "The smart card number field is required.",
        "subscriptionType": "The subscription type field is required.",
        "quantity": "The quantity field is required.",
        "phoneNumber": "The phone number field is required."
    }
}
 

Request      

POST api/v1/cable

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the data network. Example: dstv

planId   integer   

The id of the data plan. Example: 2

smartCardNumber   integer   

The smart card number. Example: 123456789

subscriptionType   string   

The subscription type. Example: renew, change

quantity   integer   

The quantity to purchase. Example: 1

phoneNumber   numeric   

The phone number of the recipient. Example: 0123456789

Data

Data Networks

requires authentication

Example request:
curl --request GET \
    --get "https://zaylinks.com/api/v1/data-networks" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://zaylinks.com/api/v1/data-networks"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/data-networks';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/data-networks'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Data fetched successfully",
    "data": [
        {
            "name": "9mobile",
            "serviceID": "9mobile-data"
        },
        {
            "name": "Airtel",
            "serviceID": "airtel-data"
        },
        {
            "name": "Glo",
            "serviceID": "glo-data"
        },
        {
            "name": "Mtn",
            "serviceID": "mtn-data"
        },
        {
            "name": "Smile",
            "serviceID": "smile-data"
        }
    ]
}
 

Request      

GET api/v1/data-networks

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Data Types

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/data-types" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"mtn-data\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/data-types"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "mtn-data"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/data-types';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'mtn-data',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/data-types'
payload = {
    "serviceID": "mtn-data"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Data fetched successfully",
    "data": [
        {
            "service": "Mtn",
            "serviceID": "mtn-data",
            "dataTypeId": 1,
            "name": "SME"
        },
        {
            "service": "Mtn",
            "serviceID": "mtn-data",
            "dataTypeId": 2,
            "name": "Corporate Gifting (CG)"
        }
    ]
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required."
    }
}
 

Request      

POST api/v1/data-types

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the data network. Example: mtn-data

Data Plans

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/data-plans" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"mtn-data\",
    \"dataTypeId\": 2
}"
const url = new URL(
    "https://zaylinks.com/api/v1/data-plans"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "mtn-data",
    "dataTypeId": 2
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/data-plans';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'mtn-data',
            'dataTypeId' => 2,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/data-plans'
payload = {
    "serviceID": "mtn-data",
    "dataTypeId": 2
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Data fetched successfully",
    "data": [
        {
            "planName": "1GB",
            "planId": 1,
            "validity": "1 month",
            "network": "Mtn",
            "serviceID": "mtn-data",
            "dataType": "Data Share",
            "dataTypeId": 1,
            "price": "255",
            "status": "active"
        },
        {
            "planName": "2GB",
            "planId": 15,
            "validity": "1 month",
            "network": "Mtn",
            "serviceID": "mtn-data",
            "dataType": "Data Share",
            "dataTypeId": 1,
            "price": "510",
            "status": "active"
        },
        {
            "planName": "3GB",
            "planId": 16,
            "validity": "1 month",
            "network": "Mtn",
            "serviceID": "mtn-data",
            "dataType": "Data Share",
            "dataTypeId": 1,
            "price": "765",
            "status": "active"
        },
        {
            "planName": "5GB",
            "planId": 17,
            "validity": "1 month",
            "network": "Mtn",
            "serviceID": "mtn-data",
            "dataType": "Data Share",
            "dataTypeId": 1,
            "price": "1275",
            "status": "active"
        }
    ]
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required.",
        "data_type": "The data type field is required."
    }
}
 

Request      

POST api/v1/data-plans

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the data network. Example: mtn-data

dataTypeId   integer   

The id of the Data type. Example: 2

Vend Data

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/data" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"mtn-data\",
    \"dataTypeId\": 2,
    \"planId\": 2,
    \"recipient\": \"0123456789\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/data"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "mtn-data",
    "dataTypeId": 2,
    "planId": 2,
    "recipient": "0123456789"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/data';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'mtn-data',
            'dataTypeId' => 2,
            'planId' => 2,
            'recipient' => '0123456789',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/data'
payload = {
    "serviceID": "mtn-data",
    "dataTypeId": 2,
    "planId": 2,
    "recipient": "0123456789"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200, completed):


{
    "status": "completed",
    "message": "Transaction successful",
    "data": {
        "type": "Data Purchase",
        "service": "Mtn",
        "serviceID": "mtn-data",
        "plan": {
            "planName": "1GB [Data Share] 1 month",
            "planId": 1,
            "validity": "1 month",
            "network": "Mtn",
            "serviceID": "mtn-data",
            "dataType": "Data Share",
            "dataTypeId": 1
        },
        "amount": "245",
        "amount_payable": "245",
        "recipient": {
            "mobile": "08161144693"
        },
        "reference": "20241106161223NYJWDYUAYWBF",
        "api_response": "Data Purchase of Mtn 1GB for 08161144693 was successful. "
    }
}
 

Example response (200, pending):


{
    "status": "pending",
    "message": "Transaction pending",
    "data": {
        "type": "Data Purchase",
        "service": "Mtn",
        "serviceID": "mtn-data",
        "plan": {
            "planName": "1GB [Data Share] 1 month",
            "planId": 1,
            "validity": "1 month",
            "network": "Mtn",
            "serviceID": "mtn-data",
            "dataType": "Data Share",
            "dataTypeId": 1
        },
        "amount": "245",
        "amount_payable": "245",
        "recipient": {
            "mobile": "08161144693"
        },
        "reference": "20241106161223NYJWDYUAYWBF",
        "api_response": "Data Purchase of Mtn 1GB for 08161144693 is currently being processed. Please check back after a while.. "
    }
}
 

Example response (200, failed):


{
    "status": "failed",
    "message": "Transaction failed",
    "data": {
        "type": "Data Purchase",
        "service": "Mtn",
        "serviceID": "mtn-data",
        "plan": {
            "planName": "1GB [Data Share] 1 month",
            "planId": 1,
            "validity": "1 month",
            "network": "Mtn",
            "serviceID": "mtn-data",
            "dataType": "Data Share",
            "dataTypeId": 1
        },
        "amount": "245",
        "amount_payable": "245",
        "recipient": {
            "mobile": "08161144693"
        },
        "reference": "20241106161223NYJWDYUAYWBF",
        "api_response": "Data Purchase of Mtn 1GB for 08161144693 failed. "
    }
}
 

Example response (403):


{
    "status": "error",
    "message": "Mtn Vending service currently unavailable."
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required.",
        "dataTypeId": "The data type id field is required.",
        "planId": "The plan id field is required.",
        "recipient": "The recipient field is required."
    }
}
 

Request      

POST api/v1/data

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the data network. Example: mtn-data

dataTypeId   integer   

The id of the Data type. Example: 2

planId   integer   

The id of the data plan. Example: 2

recipient   numeric   

The phone number of the recipient. Example: 0123456789

Education

Education Services

requires authentication

Example request:
curl --request GET \
    --get "https://zaylinks.com/api/v1/education-services" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://zaylinks.com/api/v1/education-services"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/education-services';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/education-services'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Data fetched successfully",
    "data": [
        {
            "name": "WAEC Registration Pin",
            "serviceID": "waec-registration"
        },
        {
            "name": "WAEC Result Checker Pin",
            "serviceID": "waec"
        },
        {
            "name": "Jamb Pin",
            "serviceID": "jamb"
        }
    ]
}
 

Request      

GET api/v1/education-services

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Education Plans

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/education-plans" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"waec\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/education-plans"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "waec"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/education-plans';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'waec',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/education-plans'
payload = {
    "serviceID": "waec"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Data fetched successfully",
    "data": [
        {
            "planName": "WASSCE/GCE",
            "planId": 4,
            "educationType": "WAEC Result Checker Pin",
            "serviceID": "waec",
            "price": "900",
            "status": "active"
        }
    ]
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required."
    }
}
 

Request      

POST api/v1/education-plans

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the education. Example: waec

Verify Jamb Profile Id

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/verify-jamb-profile-id" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"waec\",
    \"planId\": \"sit\",
    \"profile_id\": \"consectetur\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/verify-jamb-profile-id"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "waec",
    "planId": "sit",
    "profile_id": "consectetur"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/verify-jamb-profile-id';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'waec',
            'planId' => 'sit',
            'profile_id' => 'consectetur',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/verify-jamb-profile-id'
payload = {
    "serviceID": "waec",
    "planId": "sit",
    "profile_id": "consectetur"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Data fetched successfully",
    "data": [
        {
            "planName": "WASSCE/GCE",
            "planId": 4,
            "educationType": "WAEC Result Checker Pin",
            "serviceID": "waec",
            "price": "900",
            "status": "active"
        }
    ]
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required.",
        "planId": "The plan id field is required.",
        "profile_id": "The profile id field is required."
    }
}
 

Request      

POST api/v1/verify-jamb-profile-id

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the education. Example: waec

planId   string   

The id of an existing record in the education_plans table. Example: sit

profile_id   string   

Example: consectetur

Vend Education

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/education" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"waec\",
    \"planId\": 2,
    \"quantity\": 2,
    \"phone_number\": 81902750.04521544,
    \"profile_id\": \"0123456789\",
    \"recipient\": \"0123456789\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/education"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "waec",
    "planId": 2,
    "quantity": 2,
    "phone_number": 81902750.04521544,
    "profile_id": "0123456789",
    "recipient": "0123456789"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/education';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'waec',
            'planId' => 2,
            'quantity' => 2,
            'phone_number' => 81902750.04521544,
            'profile_id' => '0123456789',
            'recipient' => '0123456789',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/education'
payload = {
    "serviceID": "waec",
    "planId": 2,
    "quantity": 2,
    "phone_number": 81902750.04521544,
    "profile_id": "0123456789",
    "recipient": "0123456789"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200, JAMB Pin completed):


{
    "status": "completed",
    "message": "Transaction successful",
    "data": {
        "type": "Education Purchase",
        "service": "Jamb Pin",
        "serviceID": "jamb",
        "plan": {
            "planName": "UTME",
            "planId": 1
        },
        "quantity": "1",
        "amount": 4700,
        "amount_payable": 4700,
        "phone_number": "012",
        "recipient": {
            "profile_id": "0123456789",
            "name": "Capital James"
        },
        "reference": "20241106161223NYJWDYUAYWBF",
        "api_response": "Education Pin Purchase of Jamb Pin UTME was successful. Pin: 3678251321392432"
    },
    "pin": [
        {
            "pin": "3678251321392432"
        }
    ]
}
 

Example response (200, WAEC Registration completed):


{
    "status": "completed",
    "message": "Transaction successful",
    "data": {
        "type": "Education Purchase",
        "service": "WAEC Registration Pin",
        "serviceID": "waec-registration",
        "plan": {
            "planName": "WASSCE for Private Candidates - Second Series (2020)",
            "planId": 3
        },
        "quantity": "2",
        "amount": 28900,
        "amount_payable": 28900,
        "phone_number": "012",
        "reference": "20241106161223NYJWDYUAYWBF",
        "api_response": "Education Pin Purchase of WAEC Registration Pin WASSCE for Private Candidates - Second Series (2020) was successful. Pin: 0100070365657400875"
    },
    "pin": [
        {
            "pin": "0100070365657400875"
        }
    ]
}
 

Example response (200, WAEC Result Checker Pin completed):


{
    "status": "completed",
    "message": "Transaction successful",
    "data": {
        "type": "Education Purchase",
        "service": "WAEC Result Checker Pin",
        "serviceID": "waec",
        "plan": {
            "planName": "WASSCE/GCE",
            "planId": 4
        },
        "quantity": "2",
        "amount": 1800,
        "amount_payable": 1800,
        "phone_number": "012",
        "reference": "20241106161223NYJWDYUAYWBF",
        "api_response": "Education Pin Purchase of WAEC Result Checker Pin WASSCE/GCE was successful. (1) Serial No: WRN182135587, Pin: 373820665258\n(2) Serial No: WRN182135588, Pin: 373827897584\n(3) Serial No: WRN182135589, Pin: 373833873043\n"
    },
    "pin": [
        {
            "serial_no": "WRN182135587",
            "pin": "373820665258"
        },
        {
            "serial_no": "WRN182135588",
            "pin": "373827897584"
        },
        {
            "serial_no": "WRN182135589",
            "pin": "373833873043"
        }
    ]
}
 

Example response (200, pending):


{
    "status": "pending",
    "message": "Transaction successful",
    "data": {
        "type": "Education Purchase",
        "service": "WAEC Registration Pin",
        "serviceID": "waec-registration",
        "plan": {
            "planName": "WASSCE for Private Candidates - Second Series (2020)",
            "planId": 3
        },
        "quantity": "2",
        "amount": 28900,
        "amount_payable": 28900,
        "phone_number": "012",
        "reference": "20241106161223NYJWDYUAYWBF",
        "api_response": "Education Pin Purchase of WAEC Registration Pin WASSCE for Private Candidates - Second Series (2020) is currently being processed. Please check back after a while."
    },
    "pin": null
}
 

Example response (200, failed):


{
    "status": "failed",
    "message": "Transaction successful",
    "data": {
        "type": "Education Purchase",
        "service": "WAEC Registration Pin",
        "serviceID": "waec-registration",
        "plan": {
            "planName": "WASSCE for Private Candidates - Second Series (2020)",
            "planId": 3
        },
        "quantity": "2",
        "amount": 28900,
        "amount_payable": 28900,
        "phone_number": "012",
        "reference": "20241106161223NYJWDYUAYWBF",
        "api_response": "Education Pin Purchase of WAEC Registration Pin WASSCE for Private Candidates - Second Series (2020) failed."
    },
    "pin": null
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required.",
        "planId": "The plan id field is required.",
        "quantity": "The quantity field is required.",
        "phone_number": "The phone number field is required."
    }
}
 

Request      

POST api/v1/education

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the education. Example: waec

planId   integer   

The id of the education plan. Example: 2

quantity   integer   

The quantity to be purchased. Example: 2

phone_number   number   

Example: 81902750.045215

profile_id   string  optional  

nullable The jamb profile id of the user. This is required if the user is vending jamb Example: 0123456789

recipient   numeric   

The phone number of the recipient. Example: 0123456789

Electricity

Electricity Services

requires authentication

Example request:
curl --request GET \
    --get "https://zaylinks.com/api/v1/electricity-services" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://zaylinks.com/api/v1/electricity-services"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/electricity-services';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/electricity-services'
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


{
    "status": "success",
    "message": "Data fetched successfully",
    "data": [
        {
            "name": "Eko Electricity Distribution Company",
            "serviceID": "ekedc"
        },
        {
            "name": "Ibadan Electricity Distribution Company",
            "serviceID": "ibedc"
        }
    ]
}
 

Request      

GET api/v1/electricity-services

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Verify Meter Number

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/verify-meter-number" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"ibedc\",
    \"meterType\": \"prepaid, postpaid\",
    \"meterNumber\": \"0123456789\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/verify-meter-number"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "ibedc",
    "meterType": "prepaid, postpaid",
    "meterNumber": "0123456789"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/verify-meter-number';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'ibedc',
            'meterType' => 'prepaid, postpaid',
            'meterNumber' => '0123456789',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/verify-meter-number'
payload = {
    "serviceID": "ibedc",
    "meterType": "prepaid, postpaid",
    "meterNumber": "0123456789"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200):


{
    "status": "success",
    "customerName": "OLADIPO OLUWAFEMI",
    "customerAddress": "NONE"
}
 

Example response (403):


{
    "status": "error",
    "message": "Please Check your Meter Number and Try Again"
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required.",
        "meterType": "The meter type field is required.",
        "meterNumber": "The meter number field is required."
    }
}
 

Request      

POST api/v1/verify-meter-number

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the electricity. Example: ibedc

meterType   string   

The meter type. Example: prepaid, postpaid

meterNumber   numeric   

The meter number. Example: 0123456789

Vend Electricity

requires authentication

Example request:
curl --request POST \
    "https://zaylinks.com/api/v1/electricity" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"serviceID\": \"ibedc\",
    \"meterType\": \"prepaid, postpaid\",
    \"meterNumber\": \"0123456789\",
    \"amount\": 1000,
    \"phoneNumber\": \"0123456789\"
}"
const url = new URL(
    "https://zaylinks.com/api/v1/electricity"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "serviceID": "ibedc",
    "meterType": "prepaid, postpaid",
    "meterNumber": "0123456789",
    "amount": 1000,
    "phoneNumber": "0123456789"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://zaylinks.com/api/v1/electricity';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'serviceID' => 'ibedc',
            'meterType' => 'prepaid, postpaid',
            'meterNumber' => '0123456789',
            'amount' => 1000,
            'phoneNumber' => '0123456789',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://zaylinks.com/api/v1/electricity'
payload = {
    "serviceID": "ibedc",
    "meterType": "prepaid, postpaid",
    "meterNumber": "0123456789",
    "amount": 1000,
    "phoneNumber": "0123456789"
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()

Example response (200, completed):


{
    "status": "completed",
    "message": "Transaction successful",
    "data": {
        "type": "Electricity Purchase",
        "service": "Ibadan Electricity Distribution Company",
        "serviceID": "ibedc",
        "amount": "1000",
        "amount_payable": "1000.00",
        "phone_number": "08161144693",
        "recipient": {
            "meter_number": "1111111111111",
            "meter_type": "prepaid",
            "name": "OLADIPO OLUWAFEMI",
            "address": "NONE"
        },
        "reference": "20241108123542FF2FLCNIVVL6",
        "api_response": "Electricity Purchase of Ibadan Electricity Distribution Company (Prepaid) ₦1000 for 1111111111111 was successful. "
    },
    "token": " 0948  8945  8115  3789  5170  ",
    "token_unit": "55.03kwH"
}
 

Example response (200, pending):


{
    "status": "pending",
    "message": "Transaction pending",
    "data": {
        "type": "Electricity Purchase",
        "service": "Ibadan Electricity Distribution Company",
        "serviceID": "ibedc",
        "amount": "1000",
        "amount_payable": "1000.00",
        "phone_number": "08161144693",
        "recipient": {
            "meter_number": "1111111111111",
            "meter_type": "prepaid",
            "name": "OLADIPO OLUWAFEMI",
            "address": "NONE"
        },
        "reference": "20241108123542FF2FLCNIVVL6",
        "api_response": "Electricity Purchase of Ibadan Electricity Distribution Company (Prepaid) ₦1000 for 1111111111111 is currently being processed. Please check back after a while.. "
    },
    "token": null,
    "token_unit": null
}
 

Example response (200, failed):


{
    "status": "failed",
    "message": "Transaction failed",
    "data": {
        "type": "Electricity Purchase",
        "service": "Ibadan Electricity Distribution Company",
        "serviceID": "ibedc",
        "amount": "1000",
        "amount_payable": "1000.00",
        "phone_number": "08161144693",
        "recipient": {
            "meter_number": "1111111111111",
            "meter_type": "prepaid",
            "name": "OLADIPO OLUWAFEMI",
            "address": "NONE"
        },
        "reference": "20241108123542FF2FLCNIVVL6",
        "api_response": "Electricity Purchase of Ibadan Electricity Distribution Company (Prepaid) ₦1000 for 1111111111111 failed. "
    },
    "token": null,
    "token_unit": null
}
 

Example response (403):


{
    "status": "error",
    "message": "Ibadan Electricity Distribution Company Vending service currently unavailable."
}
 

Example response (422):


{
    "status": "error",
    "message": "Validation errors",
    "errors": {
        "serviceID": "The service i d field is required.",
        "meterType": "The meter type field is required.",
        "meterNumber": "The meter number field is required.",
        "amount": "The amount field is required.",
        "phoneNumber": "The phone number field is required."
    }
}
 

Request      

POST api/v1/electricity

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

serviceID   string   

The service ID of the electricity. Example: ibedc

meterType   string   

The meter type. Example: prepaid, postpaid

meterNumber   numeric   

The meter number. Example: 0123456789

amount   integer   

The amount to be purchased. Example: 1000

phoneNumber   numeric   

The phone number of the recipient. Example: 0123456789