arrow-left

Only this pageAll pages
1 of 32

ENG

Loading...

Loading...

Loading...

Account Balance

Loading...

Countries

Loading...

Loading...

Operators

Loading...

Loading...

Loading...

Loading...

FX Rates

Loading...

Commissions

Loading...

Loading...

Promotions

Loading...

Loading...

Loading...

Loading...

Top-ups

Loading...

Loading...

Loading...

Transactions

Loading...

Loading...

Airtime Errors

Loading...

Changelog

This page shares information on all updates and modifications to the Airtime API. Do you have a feature suggestion? Do let us know herearrow-up-right.

hashtag
22 March 2022

circle-info

NOTICE - PARAMETER ADDITIONS TO TOP-UP / TRANSACTION RESPONSES

Updates have been made to include the cost parameter in the response details of the following endpoints:

  • /topups

  • /topups/{{transactionId}}/status

  • /topups/reports/transactions

hashtag
09 September 2021

circle-info

NOTICE - PARAMETER ADDITIONS TO INDIAN OPERATORS

Updates have been made to include the following parameters in the details of all Indian operators

  • fixedAmountsPlanNames

hashtag
14 July 2021

circle-exclamation

NOTICE - UPCOMING CHANGE

In future releases, the commission parameter in the response data of the following endpoints will be deprecated.

/topups/reports/transactions/{transactionId}

localFixedAmountsPlanNames

More details on this can be found in the Get operator by ID and the Get operator by ISO code sections of the documentation

/operators
  • /operators/{operatorid}

  • /operators/auto-detect/phone/{phone}/countries/{iso}

  • /operators/countries/{countrycode}

  • Users are advised to work with the internationalDiscount or localDiscount parameter as it contains the same data on the operator.

    Introduction

    Making an airtime top-up comes in handy for different applications - personal and businesslike. Reloadly's Airtime API handles these use cases by providing endpoints that grant you access to over 700 operators in more than 140 countries. With this outreach, you can send airtime and also subscribe to data bundles in different currencies. The most important data you will need to send airtime successfully is the recipient's mobile number. To further learn how to integrate this RESTful API into your application, you can check out this documentation. It contains a reference of each endpoint in the Airtime API.

    View an account's balance

    With the /account/balance endpoint, you can retrieve the balance of your account in real-time

    hashtag
    Account Balance

    GET https://topups.reloadly.com/accounts/balance

    hashtag
    Headers

    Name
    Type
    Description

    hashtag
    Request samples

    hashtag
    Response parameters

    Quickstart

    hashtag
    Authorization

    The fastest way to get started with the Airtime product is to make a top-up. This section covers how to get started with the Airtime API product. To make a top-up, you will need client credentials which you can get from signing up in the dashboardarrow-up-right

    circle-info

    On the dashboard, you can get your client credentials by navigating to the Developers > API settings section

    hashtag

    hashtag
    Choose your environment

    Asides from the live environment, Reloadly provides a sandbox (also called test environment) where you can simulate real-life scenarios and use cases for each API endpoint. If you would like to first work with the test environment, you can check out the virtual sandbox in the section.

    hashtag
    Client Credentials

    hashtag

    hashtag
    Environments

    hashtag

    hashtag
    Get your access token

    Once you have your client credentials, the next step is for you to retrieve your access token. Reloadly issues access tokens (also called bearer tokens) that are used to authorize API requests. Make a request to the https://auth.reloadly.com/oauth/token URL to obtain the appropriate access token

    circle-info

    Pay attention to the value of the audience parameter: https://topups-sandbox.reloadly.com. This is the corresponding value for the Sandbox environment. When going to production you want to use https://topups.reloadly.com instead

    Once successful, you will get response data containing your access token, its privileges, and its lifespan

    circle-exclamation

    If you get an response with "errorCode": "INVALID_CREDENTIALS" you're most likely using the wrong set of credentials for the environment from where you want to get a token. Remember: the credentials used for Production are invalid in Sandbox and viceversa.

    hashtag
    Make your first top-up

    Now you've got your access token, the next step is to make a top-up on a mobile number. Reloadly spans across more than 700 operators in over 140 countries. This ensures you have a lot of options when making your first top-up. To top up a mobile number, you can make a POST request to the /topups endpoint

    If this request is successful, you will get a response containing details of your top-up

    You can test these steps out directly on our .

    hashtag
    Next steps

    Great! You have gotten started with Reloadly in the fastest way possible. Feel free to modify the code samples above in order to get more practice with our API. You can also check out the rest of the documentation for a concise understanding of the Airtime product.

    Get all operators

    The /operators endpoint allows you to retrieve information on any of the 700+ available operators that can be used to make top-ups with the Airtime API

    hashtag
    Operators

    GET https://topups.reloadly.com/operators

    currencyName

    string

    This indicates the account's currency name

    updatedAt

    string

    This indicates the last time a top-up was made from the account

    Authorization

    string

    Your access token is required as a bearer token in the request's header

    Parameter

    Type

    Description

    balance

    number

    This indicates the current account balance

    currencyCode

    string

    {
      "balance":550.75,
      "currencyCode":"USD",
      "currencyName":"US Dollar",
      "updatedAt":"2018-12-04 08:45:51"
    }
    {
      "timeStamp":"2021-05-11 21:14:00",
      "message":"Full authentication is required to access this resource",
      "path":"/accounts/balance",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    {
      "timestamp":"2021-05-11T21:14:29.629+0000",
      "status":404,
      "error":"Not Found",
      "message":"No message available",
      "path":"/accounts/balanc"
    }
    curl --location --request GET 'https://topups.reloadly.com/accounts/balance' \
    --header 'Accept: application/com.reloadly.topups-v1+json' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Content-Type: application/json'
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/accounts/balance");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
          message.Headers.TryAddWithoutValidation("Content-Type", "application/json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }

    This indicates the account's currency code

    Parameter

    Description

    client_id

    This is a private identifier for your account

    client_secret

    This is a private key that should not be shared

    Parameter

    Description

    Sandbox

    Use endpoints in test mode and simulate real-like responses

    Live

    Work with live credentials to build applications

    DevToolsarrow-up-right
    Postman collectionarrow-up-right
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/accounts/balance"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Content-Type", "application/json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/accounts/balance")
      .method("GET", null)
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Content-Type", "application/json")
      .build();
    Response response = client.newCall(request).execute();
    var myHeaders = new Headers();
    myHeaders.append("Accept", "application/com.reloadly.topups-v1+json");
    myHeaders.append("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
    myHeaders.append("Content-Type", "application/json");
    
    var requestOptions = {
      method: 'GET',
      headers: myHeaders,
      redirect: 'follow'
    };
    
    fetch("https://topups.reloadly.com/accounts/balance", requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error));
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/accounts/balance',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Accept: application/com.reloadly.topups-v1+json',
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Content-Type: application/json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/accounts/balance"
    
    payload={}
    headers = {
      'Accept': 'application/com.reloadly.topups-v1+json',
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Content-Type': 'application/json'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    curl --location --request POST 'https://auth.reloadly.com/oauth/token' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    	"client_id":"YOUR_CLIENT_ID",
    	"client_secret":"YOUR_CLIENT_SECRET",
    	"grant_type":"client_credentials",
    	"audience":"https://topups.reloadly.com"
    }'
    http https://auth.reloadly.com/oauth/token \
        client_id=CLIENTID \
        client_secret=CLIENTSECRET \
        grant_type=client_credentials \
        audience='https://topups-sandbox.reloadly.com'
    {
      "access_token":"eyJraWQiOiIwMDA1YzFmMC0xMjQ3LTRmNmUtYjU2ZC1jM2ZkZDVmMzhhOTIiLCJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9",
      "scope":"send-topups read-operators read-promotions read-topups-history read-prepaid-balance read-prepaid-commissions",
      "expires_in":5184000,
      "token_type":"Bearer"
    }::Info
    curl --location --request POST 'https://topups.reloadly.com/topups' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    	"operatorId":"685",
    	"amount":"10",
    	"customIdentifier": "This is example identifier 092",
    	"recipientPhone": {
    		"countryCode": "NG",
    		"number": "08147658721"
    	},
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }'
    http 'https://topups.reloadly.com/topups' \
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
        'Accept: application/com.reloadly.topups-v1+json' \
        'Content-Type: application/json' \
        recipientPhone[countryCode]="NG" \
        recipientPhone[number]="08147658721" \
        senderPhone[countryCode]="CA" \
        senderPhone[number]="1231231231"\
        operatorId=685 \
        amount=10 \
        customIdentifier="This is example identifier 092"
    {
      "transactionId":2127484,
      "operatorTransactionId":"2021040116191786605021010",
      "customIdentifier":null,
      "recipientPhone":"2348147658720",
      "recipientEmail":null,
      "senderPhone":null,
      "countryCode":"NG",
      "operatorId":341,
      "operatorName":"MTN Nigeria",
      "discount":0,
      "discountCurrencyCode":"NGN",
      "requestedAmount":100,
      "requestedAmountCurrencyCode":"NGN",
      "deliveredAmount":100,
      "deliveredAmountCurrencyCode":"NGN",
      "transactionDate":"2021-04-01 11:19:16",
      "pinDetail":null,
      "balanceInfo":{
        "oldBalance":9790.75,
        "newBalance":9690.75,
        "currencyCode":"NGN",
        "currencyName":"Nigerian Naira",
        "updatedAt":"2021-04-01 15:19:16"
      }
    }
    hashtag
    Query Parameters
    Name
    Type
    Description

    includeBundles

    boolean

    Indicates if any airtime and data bundles being offered by the operator should be included in the API response. Default value is true

    includeData

    boolean

    Indicates if any airtime or data plans being offered by the operator should be included in the API response. Default value is true

    hashtag
    Headers

    Name
    Type
    Description

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    {
      "content":[
        {
    

    hashtag

    hashtag
    Request samples

    hashtag

    hashtag
    Response parameters

    Parameter

    Type

    Description

    id/operatorId

    integer

    The ID of the operator

    name

    string

    Get country by ISO Code

    With the /countries/{countrycode} endpoint, you can retrieve the details of a country by making a request with its ISO code

    hashtag
    Country by ISO code

    GET https://topups.reloadly.com/countries/{countrycode}

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag

    hashtag
    Request samples

    hashtag

    hashtag
    Response parameters

    Get commissions by operator ID

    With the /operators/{operatorid}/commissions endpoint, you can retrieve the details of an active discount being carried out by an operator by making a request with the operator's ID

    hashtag
    Commissions by operator ID

    GET https://topups.reloadly.com/operators/{operatorid}/commissions

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag

    hashtag
    Request samples

    hashtag

    hashtag
    Response Parameters

    Get all countries

    Using the /countries endpoint, you can retrieve data on over 140 countries where airtime top-ups can be made with the Airtime API

    hashtag
    Countries

    GET https://topups.reloadly.com/countries

    hashtag
    Headers

    Name
    Type
    Description

    hashtag

    hashtag
    Request samples

    hashtag
    Response parameters

    hashtag

    Get operator by ID

    With the /operators/{operatorid} endpoint, a user can fetch details of an operator by making a request with the operator's ID

    hashtag
    Operator by ID

    GET https://topups.reloadly.com/operators/{operatorid}

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Query Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag

    hashtag
    Request samples

    hashtag
    Response parameters

    hashtag
    Response parameters (for operators in India)

    Auto-detect an operator

    With the /operators/auto-detect/phone/{phone}/countries/{iso} endpoint, a user can retrieve the operator details of a mobile number and the ISO code of the country where the mobile number is registered

    hashtag
    Auto-detect operator

    GET https://topups.reloadly.com/operators/auto-detect/phone/{phone}/countries/{countryisocode}

    Fetch FX Rate by operator ID

    The /operators/fx-rate endpoint allows you to fetch an operator's foreign exchange rate for international top-ups

    hashtag
    FX Rate

    POST https://topups.reloadly.com/operators/fx-rate

    {
      "timeStamp":"2021-05-12 08:06:03",
      "message":"Full authentication is required to access this resource",
      "path":"/operators",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    {
      "timestamp":"2021-05-12T08:00:42.221+0000",
      "status":404,
      "error":"Not Found",
      "message":"No message available",
      "path":"/operator"
    }
    curl --location --request GET 'https://topups.reloadly.com/operators' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' 
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/operators");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/operators"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/operators")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/operators',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/operators',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json',
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/operators"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json',
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    "operatorId":88,
    "name":"Movistar Colombia",
    "bundle":false,
    "data":false,
    "pin":false,
    "supportsLocalAmounts":false,
    "denominationType":"RANGE",
    "senderCurrencyCode":"USD",
    "senderCurrencySymbol":"$",
    "destinationCurrencyCode":"COP",
    "destinationCurrencySymbol":"$",
    "commission":4.42,
    "internationalDiscount":4.42,
    "localDiscount":0.00,
    "mostPopularAmount":null,
    "minAmount":5.00,
    "maxAmount":50,
    "localMinAmount":null,
    "localMaxAmount":null,
    "country":{
    "isoName":"CO",
    "name":"Colombia"
    },
    "fx":{
    "rate":2192.1867,
    "currencyCode":"COP"
    },
    "logoUrls":[
    "https://s3.amazonaws.com/rld-operator/3f4a8bcd3268-size-1.png",
    "https://s3.amazonaws.com/rld-operator/3f4a8bcd3268-size-2.png",
    "https://s3.amazonaws.com/rld-operator/3f4a8bcd3268-size-3.png"
    ],
    "fixedAmounts":[
    ],
    "fixedAmountsDescriptions":[
    ],
    "localFixedAmounts":[
    ],
    "localFixedAmountsDescriptions":[
    ],
    "suggestedAmounts":[
    7,
    10,
    15,
    20,
    25,
    30,
    35,
    40,
    45,
    50,
    55,
    60,
    65
    ],
    "suggestedAmountsMap":{
    "7":19482.51,
    "10":27832.16,
    "15":41748.23,
    "20":55664.31,
    "25":69580.39,
    "30":83496.46,
    "35":97412.54,
    "40":111328.61,
    "45":125244.69,
    "50":139160.77,
    "55":153076.84,
    "60":166992.92,
    "65":180909.00
    },
    "promotions":[
    ]
    }
    ],
    "pageable":{
    "sort":{
    "unsorted":true,
    "sorted":false
    },
    "pageSize":1,
    "pageNumber":0,
    "offset":0,
    "paged":true,
    "unpaged":false
    },
    "totalPages":609,
    "totalElements":609,
    "last":false,
    "sort":{
    "unsorted":true,
    "sorted":false
    },
    "first":true,
    "numberOfElements":3,
    "size":3,
    "number":0
    }

    includePin

    boolean

    Indicates if PIN details for the operator should be included in the API response. Default value is true

    suggested AmountsMap

    boolean

    Indicates if the suggestedAmountsMap field should be returned. Default value is false

    suggested Amounts

    boolean

    Indicates if the suggestedAmounts field should be returned. Default value is false

    size

    integer

    This indicates the number of operators to be retrieved on a page. Default value is 200

    page

    integer

    This indicates the page of the operator list being retrieved. Default value is 1

    The operator's name

    bundle

    boolean

    Indicates if the operator has any existing bundle plans

    data

    boolean

    Indicates if the operator has any existing data plans.

    pin

    boolean

    Indicates if the operator supports PIN transactions

    supports

    LocalAmounts

    boolean

    Indicates if the operator can make top-ups in local amounts

    denominationType

    string

    Indicates if the operator makes top-ups through a fixed amount or a range of amounts. Options include FIXED and RANGE

    senderCurrencyCode

    string

    Indicates the currency code of the account where the top-up is being made from

    senderCurrency

    Symbol

    string

    Indicates the currency symbol of the account where the top-up is being made from

    destinationCurrencyCode

    string

    Indicates the currency code of the mobile number where the top-up is being sent to

    destinationCurrencySymbol

    string

    Indicates the currency symbol of the mobile number where the top-up is being sent to

    commission

    integer

    Indicates if the operator offers a commission or discount

    international

    Discount

    integer

    Indicates if the operator offers a discount for top-ups made to foreign numbers

    localDiscount

    integer

    Indicates if the operator offers a discount for top-ups made to local numbers

    mostPopularAmount

    integer

    Indicates the amount that is often used to make a top-up

    mostPopular

    LocalAmount

    integer

    Indicates the amount that is often used to make a top-up locally

    minAmount

    integer

    Indicates the minimum amount that can be used to make a top-up

    maxAmount

    integer

    Indicates the maximum amount that can be used to make a top-up

    localMinAmount

    integer

    Indicates the minimum amount that can be used to make a top-up locally

    localMaxAmount

    integer

    Indicates the maximum amount that can be used to make a top-up locally

    isoName

    string

    Indicates the country's ISO code

    name

    string

    Indicates the country's name

    rate

    integer

    Indicates the FX rate at which the top-up will be made

    currencyCode

    string

    Indicates the code of the currency at which the top-up will be made

    logoURLs

    string

    These are links to SVG images of the operator's logos

    fixedAmounts

    integer

    Indicates the fixed amounts that a top-up can be made in with the operator

    fixedAmounts

    Description

    string

    Indicates the descriptions for the operator's fixed amounts

    localFixedAmounts

    integer

    Indicates the local fixed amounts that a top-up can be made in with the operator

    localFixed

    AmountsDescription

    string

    Indicates the descriptions for the operator's local fixed amounts

    suggestedAmounts

    integer

    Indicates the suggested amounts that can be used to make a top-up with the operator

    suggested

    AmountsMap

    string

    Indicates the suggested amounts that can be mapped through

    promotions

    string

    Indicates the promotions currently offered by the operator

    currencyCode

    string

    This indicates the code of the country's currency

    currencyName

    string

    This indicates the name of the country's currency

    currencySymbol

    string

    This indicates the symbol of the country's currency

    flag

    string

    This is a link to an SVG image of the country's flag

    callingCodes

    string

    This indicates the country's international dialing code

    countryCode*

    string

    The country's ISO Code

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    Parameters

    Type

    Description

    isoName

    string

    This indicates the ISO code of the country

    name

    string

    {
      "isoName":"US",
      "name":"United States",
      "currencyCode":"USD",
      "currencyName":"US Dollar",
      "currencySymbol":"$",
      "flag":"https://s3.amazonaws.com/rld-flags/us.svg",
      "callingCodes":[
        "+1"
      ]
    }
    {
      "timeStamp":"2021-05-12 07:17:42",
      "message":"Full authentication is required to access this resource",
      "path":"/countries/US",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }

    This indicates the country's name

    localPercentage

    integer

    Indicates the percentage discount for local top-ups

    updatedAt

    integer

    Indicates the time the discount was first created by the operator

    operatorId

    string

    Indicates the operator's ID

    name

    string

    Indicates the operator's name

    countryCode

    string

    Indicates the ISO code of the country where the operator is registered

    data

    boolean

    Indicates if the operator has any existing data discounts

    bundle

    boolean

    Indicates if the operator has any existing bundle discounts

    status

    boolean

    Indicates if the operator has any existing discounts

    operatorId*

    integer

    The ID of the operator whose discount information is being retrieved

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    Parameter

    Type

    Description

    percentage

    integer

    Indicates the percentage discount for every top-up

    international

    Percentage

    integer

    {
      "operator":{
        "operatorId":173,
        "name":"Digicel Haiti",
        "countryCode":"HT",
        "status":true,
        "bundle":false,
        "data":false
      },
      "percentage":13,
      "internationalPercentage":13,
      "localPercentage":0.00,
      "updatedAt":"2020-02-08 19:32:43"
    }
    {
        "timeStamp": "2021-05-11 22:34:35",
        "message": "Full authentication is required to access this resource",
        "path": "/operators/173/commissions",
        "errorCode": "INVALID_TOKEN",
        "infoLink": null,
        "details": []
    }

    Indicates the percentage discount for international top-ups

    currencyCode

    string

    This indicates the code of the country's currency

    currencyName

    string

    This indicates the name of the country's currency

    currencySymbol

    string

    This indicates the symbol of the country's currency

    flag

    string

    This is a link to an SVG image of the country's flag

    callingCodes

    string

    This indicates the country's international dialing code

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    Parameter

    Type

    Description

    isoName

    string

    This indicates the ISO code of the country

    name

    string

    [
      {
        "isoName":"AF",
        "name":"Afghanistan",
        "currencyCode":"AFN",
        "currencyName":"Afghan Afghani",
        "currencySymbol":"Ř‹",
        "flag":"https://s3.amazonaws.com/rld-flags/af.svg",
        "callingCodes":[
          "+93"
        ]
      },
      {
        "isoName":"AS",
        "name":"American Samoa",
        "currencyCode":"USD",
        "currencyName":"US Dollar",
        "currencySymbol":"$",
        "flag":"https://s3.amazonaws.com/rld-flags/as.svg",
        "callingCodes":[
          "+1684"
        ]
      },
      {
        "isoName":"AI",
        "name":"Anguilla",
        "currencyCode":"XCD",
        "currencyName":"East Caribbean Dollar",
        "currencySymbol":"XCD",
        "flag":"https://s3.amazonaws.com/rld-flags/ai.svg",
        "callingCodes":[
          "+1264"
        ]
      },
      {
        "isoName":"AG",
        "name":"Antigua and Barbuda",
        "currencyCode":"XCD",
        "currencyName":"East Caribbean Dollar",
        "currencySymbol":"XCD",
        "flag":"https://s3.amazonaws.com/rld-flags/ag.svg",
        "callingCodes":[
          "+1268"
        ]
      }
    ]

    This indicates the country's name

    boolean

    Indicates if the suggestedAmounts field should be returned. Default value is false

    bundle

    boolean

    Indicates if the operator has any existing bundle plans

    data

    boolean

    Indicates if the operator has any existing data plans

    pin

    boolean

    Indicates if the operator supports PIN transactions

    supports

    LocalAmounts

    boolean

    Indicates if the operator can make top-ups in local amounts

    denominationType

    string

    Indicates if the operator makes top-ups through a fixed amount or a range of amounts. Options include FIXED and RANGE

    senderCurrencyCode

    string

    Indicates the currency code of the account where the top-up is being made from

    senderCurrency

    Symbol

    string

    Indicates the currency symbol of the account where the top-up is being made from

    destination

    CurrencyCode

    string

    Indicates the currency code of the mobile number where the top-up is being sent to

    destination

    CurrencySymbol

    string

    Indicates the currency symbol of the mobile number where the top-up is being sent to

    commission

    integer

    Indicates if the operator offers a commission or discount

    international

    Discount

    integer

    Indicates if the operator offers a discount for top-ups made to foreign numbers

    localDiscount

    integer

    Indicates if the operator offers a discount for top-ups made to local numbers

    mostPopularAmount

    integer

    Indicates the amount that is often used to make a top-up

    mostPopular

    LocalAmount

    integer

    Indicates the amount that is often used to make a top-up locally

    minAmount

    integer

    Indicates the minimum amount that can be used to make a top-up

    maxAmount

    integer

    Indicates the maximum amount that can be used to make a top-up

    localMinAmount

    integer

    Indicates the minimum amount that can be used to make a top-up locally

    localMaxAmount

    integer

    Indicates the maximum amount that can be used to make a top-up locally

    isoName

    string

    Indicates the country's ISO code

    name

    string

    Indicates the country's name

    rate

    integer

    Indicates the FX rate at which the top-up will be made

    currencyCode

    string

    Indicates the code of the currency at which the top-up will be made

    logoURLs

    string

    These are links to SVG images of the operator's logos

    fixedAmounts

    integer

    Indicates the fixed amounts that a top-up can be made in with the operator

    fixedAmounts

    Description

    string

    Indicates the descriptions for the operator's fixed amounts

    localFixedAmounts

    integer

    Indicates the local fixed amounts that a top-up can be made in with the operator

    localFixed

    AmountsDescription

    string

    Indicates the descriptions for the operator's local fixed amounts

    suggestedAmounts

    integer

    Indicates the suggested amounts that can be used to make a top-up with the operator

    suggested

    AmountsMap

    string

    Indicates the suggested amounts that can be mapped through

    promotions

    string

    Indicates the promotions currently offered by the operator

    locationName

    string

    This is the name of a geographical location that has a different recharge plan

    fixedAmounts

    integer

    Indicates the fixed amounts that a top-up can be made in with the operator

    localAmounts

    integer

    Indicates the local amounts that a top-up can be made in with the operator

    fixedAmounts

    PlanNames

    string

    Indicates the plan name (top-up, data, or bundle) for each fixed amount provided by the operator

    fixedAmounts

    Descriptions

    string

    Indicates the plan description (top-up, data, or bundle) for each fixed amount provided by the operator

    localFixedAmounts

    PlanNames

    string

    Indicates the plan name (top-up, data, or bundle) for each local fixed amount provided by the operator

    localFixedAmounts

    PlanDescriptions

    string

    Indicates the plan description (top-up, data, or bundle) for each local fixed amount provided by the operator

    operatorId*

    integer

    This indicates the operator's ID

    supports Geographical RechargePlans

    boolean

    Indicates if the supportsGeograhicalRechargePlans field should be returned. Default value is false

    suggested AmountsMap

    boolean

    Indicates if the suggestedAmountsMap field should be returned. Default value is false

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    Parameter

    Type

    Description

    id/operatorId

    integer

    This indicates the operator's ID

    name

    string

    Parameter

    Type

    Description

    geographical

    RechargePlans

    object

    Indicates an object that contains the details of each geographical plan owned by the operator within a country

    locationCode

    string

    {
      "operatorId":200,
      "name":"Airtel India",
      "bundle":false,
      "data":false,
      "pin":false,
      "supportsGeographicalRechargePlans":true,
      "supportsLocalAmounts":false,
      "denominationType":"FIXED",
      "senderCurrencyCode":"USD",
      "senderCurrencySymbol":"$",
      "destinationCurrencyCode":"INR",
      "destinationCurrencySymbol":"₹",
      "commission":17.0,
      "internationalDiscount":17.0,
      "localDiscount":0.5,
      "mostPopularAmount":null,
      "mostPopularLocalAmount":null,
      "minAmount":null,
      "maxAmount":null,
      "localMinAmount":null,
      "localMaxAmount":null,
      "country":{
        "isoName":"IN",
        "name":"India"
      },
      "fx":{
        "rate":59,
        "currencyCode":"INR"
      },
      "logoUrls":[
        "https://s3.amazonaws.com/rld-operator/3f4a8bcd3268-size-1.png",
        "https://s3.amazonaws.com/rld-operator/3f4a8bcd3268-size-2.png",
        "https://s3.amazonaws.com/rld-operator/3f4a8bcd3268-size-3.png"
      ],
      "fixedAmounts":[
        
      ],
      "fixedAmountsDescriptions":[
        
      ],
      "localFixedAmounts":[
        
      ],
      "localFixedAmountsDescriptions":[
        
      ],
      "suggestedAmounts":[
        
      ],
      "suggestedAmountsMap":{
        
      },
      "additionalPlans":null,
      "geographicalRechargePlans":[
        {
          "locationCode":"AP",
          "locationName":"Andhra Pradesh",
          "fixedAmounts":[
            0.17,
            8.47,
            84.75
          ],
          "localAmounts":[
            20.00,
            500.00,
            5000.00
          ],
          "fixedAmountsDescriptions":{
            "0.31":"Get ISD Calling at discounted rates for 28 Days.",
            "8.47":"Get Talktime of Rs. 423.73",
            "84.75":"Get Talktime of Rs. 4237.29"
          },
          "localFixedAmountsDescriptions":{
            "18.00":"Get ISD Calling at discounted rates for 28 Days.",
            "100.00":"Get Talktime of Rs. 81.75",
            "5000.00":"Get Talktime of Rs. 4237.29"
          }
        },
        "locationCode":"DEL",
        "locationName":"Delhi",
        "fixedAmounts":[
          0.60,
          1.63,
          8.35
        ],
        "localAmounts":[
          26.00,
          51.00,
          501.00
        ],
        "fixedAmountsDescriptions":{
          "0.20":"Get 120 local/national SMS",
          "0.85":"Get 500 local/national SMS",
          "8.35":"Get 75 GB 4G/3G/2G Data"
        },
        "localFixedAmountsDescriptions":{
          "26.00":"Get 250 local/national SMS",
          "251.00":"Get 50 GB 4G/3G/2G Data",
          "501.00":"Get 75 GB 4G/3G/2G Data"
        }
      },
      "promotions":[
        
      ]

    suggested Amounts

    This indicates the operator's name

    This is an abbreviation for the geographical location that has a different recharge plan. Examples include “AP” for “Andhra Pradesh” or “DEL” for “Delhi”

    {
      "timeStamp":"2021-05-12 07:15:00",
      "message":"Country not found and/or not currently supported",
      "path":"/countries/PKGG",
      "errorCode":"COUNTRY_NOT_SUPPORTED",
      "infoLink":null,
      "details":[
        
      ]
    }
    curl --location --request GET 'https://topups.reloadly.com/countries/PK' \
    --header 'Accept: application/com.reloadly.topups-v1+json' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE'
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/countries/PK");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/countries/PK"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/countries/PK")
      .method("GET", null)
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .build();
    Response response = client.newCall(request).execute();
    var myHeaders = new Headers();
    myHeaders.append("Accept", "application/com.reloadly.topups-v1+json");
    myHeaders.append("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
    
    var requestOptions = {
      method: 'GET',
      headers: myHeaders,
      redirect: 'follow'
    };
    
    fetch("https://topups.reloadly.com/countries/PK", requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error));
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/countries/PK',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Accept: application/com.reloadly.topups-v1+json',
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/countries/PK"
    
    payload={}
    headers = {
      'Accept': 'application/com.reloadly.topups-v1+json',
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    
    {
        "timestamp": "2021-05-11T22:33:12.101+0000",
        "status": 404,
        "error": "Not Found",
        "message": "No message available",
        "path": "/operators/173/commission"
    }
    curl --location --request GET 'https://topups.reloadly.com/operators/173/commissions' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json'
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/operators/173/commissions");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/operators/173/commissions"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/operators/173/commissions")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .build();
    Response response = client.newCall(request).execute();
    var myHeaders = new Headers();
    myHeaders.append("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
    myHeaders.append("Accept", "application/com.reloadly.topups-v1+json");
    
    var requestOptions = {
      method: 'GET',
      headers: myHeaders,
      redirect: 'follow'
    };
    
    fetch("https://topups.reloadly.com/operators/173/commissions", requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error));
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/operators/173/commissions',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/operators/173/commissions"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    {
      "timeStamp":"2021-05-11 21:14:00",
      "message":"Full authentication is required to access this resource",
      "path":"/countries",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    {
      "timestamp":"2021-05-12T09:23:19.861+0000",
      "status":404,
      "error":"Not Found",
      "message":"No message available",
      "path":"/country"
    }
    curl --location --request GET 'https://topups.reloadly.com/countries' \
    --header 'Accept: application/com.reloadly.topups-v1+json' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE'
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
          
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/countries");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/countries"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/countries")
      .method("GET", null)
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/countries',
      'headers': {
        'Accept': 'application/com.reloadly.topups-v1+json',
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE'
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/countries',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Accept: application/com.reloadly.topups-v1+json',
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/countries"
    
    payload={}
    headers = {
      'Accept': 'application/com.reloadly.topups-v1+json',
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    {
      "timestamp":"2021-05-13T23:15:31.837+0000",
      "status":404,
      "error":"Not Found",
      "message":"No message available",
      "path":"/operator/128"
    }
    {
       "id":200,
       "operatorId":200,
       "name":"Airtel India",
       "bundle":false,
       "data":false,
       "pin":false,
       "supportsLocalAmounts":false,
       "supportsGeographicalRechargePlans":true,
       "denominationType":"FIXED",
       "senderCurrencyCode":"NGN",
       "senderCurrencySymbol":"₦",
       "destinationCurrencyCode":"INR",
       "destinationCurrencySymbol":"₹",
       "commission":17.0,
       "internationalDiscount":17.0,
       "localDiscount":0.5,
       "mostPopularAmount":null,
       "mostPopularLocalAmount":null,
       "minAmount":null,
       "maxAmount":null,
       "localMinAmount":null,
       "localMaxAmount":null,
       "country":{
          "isoName":"IN",
          "name":"India"
       },
       "fx":{
          "rate":0.14094,
          "currencyCode":"INR"
       },
       "logoUrls":[
          "https://s3.amazonaws.com/rld-operator/48a34cc8-a395-43b2-848d-8caa7af71649-size-1.png",
          "https://s3.amazonaws.com/rld-operator/48a34cc8-a395-43b2-848d-8caa7af71649-size-2.png",
          "https://s3.amazonaws.com/rld-operator/48a34cc8-a395-43b2-848d-8caa7af71649-size-3.png"
       ],
       "fixedAmounts":[
          
       ],
       "fixedAmountsDescriptions":{
          
       },
       "localFixedAmounts":[
          
       ],
       "localFixedAmountsDescriptions":{
          
       },
       "suggestedAmounts":[
          
       ],
       "suggestedAmountsMap":{
          
       },
       "geographicalRechargePlans":[
          {
             "locationCode":"ASM",
             "locationName":"Assam",
             "fixedAmounts":[
                69.87,
                139.74,
                706.92,
                3542.82,
                7085.64,
                35432.31
             ],
             "localAmounts":[
                10.00,
                20.00,
                100.00,
                500.00,
                1000.00,
                5000.00
             ],
             "fixedAmountsPlanNames":{
                "0.17":"Topup Plan",
                "0.34":"Topup Plan",
                "1.72":"Topup Plan",
                "8.62":"Topup Plan",
                "17.24":"Topup Plan",
                "86.21":"Topup Plan"
             },
             "fixedAmountsDescriptions":{
                "69.87":"Get Talktime of Rs. 7.47. Validity : 0 Days. Talk time : 7.47",
                "139.74":"Get Talktime of Rs. 14.95. Validity : 0 Days. Talk time : 14.95",
                "706.92":"Get Talktime of Rs. 81.75. Validity : 0 Days. Talk time : 81.75",
                "3542.82":"Get Talktime of Rs. 423.73. Validity : 0 Days. Talk time : 423.73",
                "7085.64":"Get Talktime of Rs. 847.46. Validity : 0 Days. Talk time : 847.46",
                "35432.31":"Get Talktime of Rs. 4237.29. Validity : 0 Days. Talk time : 4237.29"
             },
             "localFixedAmountsPlanNames":{
                "10.00":"Topup Plan",
                "20.00":"Topup Plan",
                "100.00":"Topup Plan",
                "500.00":"Topup Plan",
                "1000.00":"Topup Plan",
                "5000.00":"Topup Plan"
             },
             "localFixedAmountsDescriptions":{
                "10.00":"Get Talktime of Rs. 7.47. Validity : 0 Days. Talk time : 7.47",
                "20.00":"Get Talktime of Rs. 14.95. Validity : 0 Days. Talk time : 14.95",
                "100.00":"Get Talktime of Rs. 81.75. Validity : 0 Days. Talk time : 81.75",
                "500.00":"Get Talktime of Rs. 423.73. Validity : 0 Days. Talk time : 423.73",
                "1000.00":"Get Talktime of Rs. 847.46. Validity : 0 Days. Talk time : 847.46",
                "5000.00":"Get Talktime of Rs. 4237.29. Validity : 0 Days. Talk time : 4237.29"
             }
          },
          {
             "locationCode":"PUN",
             "locationName":"Punjab",
             "fixedAmounts":[
                69.87,
                139.74,
                706.92,
                3542.82,
                7085.64,
                35432.31
             ],
             "localAmounts":[
                10.00,
                20.00,
                100.00,
                500.00,
                1000.00,
                5000.00
             ],
             "fixedAmountsPlanNames":{
                "0.17":"Topup Plan",
                "0.34":"Topup Plan",
                "1.72":"Topup Plan",
                "8.62":"Topup Plan",
                "17.24":"Topup Plan",
                "86.21":"Topup Plan"
             },
             "fixedAmountsDescriptions":{
                "69.87":"Get Talktime of Rs. 7.47. Validity : 0 Days. Talk time : 7.47",
                "139.74":"Get Talktime of Rs. 14.95. Validity : 0 Days. Talk time : 14.95",
                "706.92":"Get Talktime of Rs. 81.75. Validity : 0 Days. Talk time : 81.75",
                "3542.82":"Get Talktime of Rs. 423.73. Validity : 0 Days. Talk time : 423.73",
                "7085.64":"Get Talktime of Rs. 847.46. Validity : 0 Days. Talk time : 847.46",
                "35432.31":"Get Talktime of Rs. 4237.29. Validity : 0 Days. Talk time : 4237.29"
             },
             "localFixedAmountsPlanNames":{
                "10.00":"Topup Plan",
                "20.00":"Topup Plan",
                "100.00":"Topup Plan",
                "500.00":"Topup Plan",
                "1000.00":"Topup Plan",
                "5000.00":"Topup Plan"
             },
             "localFixedAmountsDescriptions":{
                "10.00":"Get Talktime of Rs. 7.47. Validity : 0 Days. Talk time : 7.47",
                "20.00":"Get Talktime of Rs. 14.95. Validity : 0 Days. Talk time : 14.95",
                "100.00":"Get Talktime of Rs. 81.75. Validity : 0 Days. Talk time : 81.75",
                "500.00":"Get Talktime of Rs. 423.73. Validity : 0 Days. Talk time : 423.73",
                "1000.00":"Get Talktime of Rs. 847.46. Validity : 0 Days. Talk time : 847.46",
                "5000.00":"Get Talktime of Rs. 4237.29. Validity : 0 Days. Talk time : 4237.29"
             }
          }
       ],
       "promotions":[
          
       ]
    }
    {
      "timeStamp":"2021-05-13 23:07:04",
      "message":"Could not retrieve/update resources at the moment, please try again later",
      "path":"/operators/1288",
      "errorCode":null,
      "infoLink":null,
      "details":[
        
      ]
    }
    {
      "timeStamp":"2021-05-12 07:17:42",
      "message":"Full authentication is required to access this resource",
      "path":"/operators/128",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    curl --location --request GET 'https://topups.reloadly.com/operators/128?suggestedAmounts=true&suggestedAmountsMap=true' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' 
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/operators/128?suggestedAmounts=true&suggestedAmountsMap=true");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/operators/128?suggestedAmounts=true&suggestedAmountsMap=true"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/operators/128?suggestedAmounts=true&suggestedAmountsMap=true")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/operators/128?suggestedAmounts=true&suggestedAmountsMap=true',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json'
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/operators/128?suggestedAmounts=true&suggestedAmountsMap=true',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/operators/128?suggestedAmounts=true&suggestedAmountsMap=true"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json'
    }

    hashtag
    Path Parameters

    Name
    Type
    Description

    countryIsoCode*

    string

    The ISO code of the country where the mobile number is registered

    phone*

    string

    The mobile number whose operator is to be auto-detected

    hashtag
    Query Parameters

    Name
    Type
    Description

    suggested AmountsMap

    boolean

    Indicates if the suggestedAmountsMap field should be returned. Default value is false

    suggested Amounts

    boolean

    Indicates if the suggestedAmounts field should be returned. Default value is false

    hashtag
    Headers

    Name
    Type
    Description

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    {
      "operatorId":88,
      "name":"Movistar Colombia",
    

    circle-info

    Reloadly has an open-source library used to format, parse, and validate the authenticity of an international phone number. You can check it out here on GitHubarrow-up-right.

    circle-info

    Do note that due to the regional differences across Indian operators, the Auto-detect endpoint is a PAID service for mobile numbers registered in India. This service costs 0.0013 USD per API call involving mobile numbers registered in India only. If you have any questions, you can always reach out to us via our developer communityarrow-up-right

    hashtag

    hashtag
    Request samples

    hashtag

    hashtag
    Response parameters

    Parameter

    Type

    Description

    id/operatorId

    integer

    This indicates the operator's ID

    name

    string

    hashtag
    Headers
    Name
    Type
    Description

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    hashtag
    Request Body

    Name
    Type
    Description

    operatorId*

    integer

    The ID of the receiving mobile number's operator

    amount*

    integer

    The top-up amount being sent to the receiving mobile number

    {
      "id":174,
      "name":"Natcom Haiti",
    
    {
        "timeStamp": "2021-05-11 22:34:35",
    
    {
        "timestamp": "2021-05-11T23:46:00.418+0000",
    

    hashtag

    hashtag
    Request samples

    hashtag

    hashtag
    Response parameters

    Parameter

    Type

    Description

    id

    integer

    Indicates the ID of the operator

    name

    string

    Get all commissions

    With the /operators/commissions endpoint, developers can get a list of all operators who are running active discounts on top-ups

    hashtag
    Commissions

    GET https://topups.reloadly.com/operators/commissions

    hashtag
    Query Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag

    hashtag
    Request samples

    hashtag

    hashtag
    Response Parameters

    Get operator by ISO Code

    Using the /operators/countries/{countrycode} endpoint, developers can retrieve an operator's details using the ISO code of the country where it is registered

    hashtag
    Operator by ISO

    GET https://topups.reloadly.com/operators/countries/{countrycode}

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Query Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag

    hashtag
    Request samples

    hashtag
    Response parameters

    hashtag
    Response parameters (for operators in India)

    Get all promotions

    Using the /promotions endpoint, you can get information on every operator running an active promotion on any of their products — airtime or data

    hashtag
    Promotions

    GET https://topups.reloadly.com/promotions

    hashtag
    Query Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag

    hashtag
    Request samples

    hashtag

    hashtag
    Response parameters

    Get promotions by ID

    With the /promotions/{promotionid} endpoint, you can fetch the details of a promotion by making a request with its ID

    hashtag
    Promotions by ID

    GET https://topups.reloadly.com/promotions/{promotionid}

    Get promotion by operator ID

    Using the /promotions/operators/{operatorid} endpoint, you can get the details of every promotion on an operator

    hashtag
    Promotion by operator ID

    GET https://topups.reloadly.com/promotions/operators/{operatorid}

    Get all transactions

    Using the /topups/reports/transactions endpoint, developers can get information on every top-up transaction made on a Reloadly account

    hashtag
    Transactions

    GET https://topups.reloadly.com/topups/reports/transactions

    Get promotions by ISO code

    With the /promotions/country-codes/{countrycode} endpoint, you can retrieve the promotions going on in a country by using its ISO code

    hashtag
    Promotions by ISO code

    GET https://topups.reloadly.com/promotions/country-codes/{countrycode}

    Make a top-up

    With the /topups endpoint, developers can make an airtime recharge to any mobile number within the operators covered by Reloadly

    hashtag
    Top-up

    POST https://topups.reloadly.com/topups

    Make an asynchronous top-up

    Using the /topup-async endpoint, developers have a faster way to view the status of every top-up that they make in real-time

    For every asynchronous top-up that is made, a transaction ID is the only parameter returned as a response. This transaction ID can be used to confirm if the top-up request is successful, still processing, or failed

    hashtag
    Async top-up

    {
      "timeStamp":"2021-05-12 08:06:03",
      "message":"Full authentication is required to access this resource",
      "path":"",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    {
      "timestamp":"2021-05-17T14:40:02.376+0000",
      "status":404,
      "error":"Not Found",
      "message":"No message available",
      "path":"/operators/auto-detect/phon/03238482221/countries/PK
    curl --location --request GET 'https://topups.reloadly.com/operators/auto-detect/phone/03238482221/countries/PK?suggestedAmountsMap=true&SuggestedAmounts=true' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json'
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/operators/auto-detect/phone/03238482221/countries/PK?suggestedAmountsMap=true&SuggestedAmounts=true");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/operators/auto-detect/phone/03238482221/countries/PK?suggestedAmountsMap=true&SuggestedAmounts=true"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/operators/auto-detect/phone/03238482221/countries/PK?suggestedAmountsMap=true&SuggestedAmounts=true")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/operators/auto-detect/phone/03238482221/countries/PK?suggestedAmountsMap=true&SuggestedAmounts=true',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json'
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/operators/auto-detect/phone/03238482221/countries/PK?suggestedAmountsMap=true&SuggestedAmounts=true',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/operators/auto-detect/phone/03238482221/countries/PK?suggestedAmountsMap=true&SuggestedAmounts=true"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    {
        "timeStamp": "2021-05-11 23:43:04",
        "message": "Fx rate is currently not available for this operator, please try again later or contact support.",
        "path": "/operators/fx-rate",
        "errorCode": "FX_RATE_NOT_AVAILABLE",
        "infoLink": null,
        "details": []
    }
    curl --location --request POST 'https://topups.reloadly.com/operators/fx-rate' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    	"operatorId":"341",
    	"amount":"10"
    }'
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
          var json = JsonConvert.SerializeObject(new {
            operator_id = "1", 
            amount = "1" 
          });
    
          var message = new HttpRequestMessage(HttpMethod.Post, "https://topups.reloadly.com/operators/fx-rate");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
          message.Headers.TryAddWithoutValidation("Content-Type", "application/json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "strings"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/operators/fx-rate"
      method := "POST"
    
      payload := strings.NewReader(`{
    	"operatorId":"341",
    	"amount":"10"
    }`)
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, payload)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
      req.Header.Add("Content-Type", "application/json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, "{\n\t\"operatorId\":\"341\",\n\t\"amount\":\"10\"\n}");
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/operators/fx-rate")
      .method("POST", body)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .addHeader("Content-Type", "application/json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'POST',
      'url': 'https://topups.reloadly.com/operators/fx-rate',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        "operatorId": "341",
        "amount": "10"
      })
    
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/operators/fx-rate',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS =>'{
    	"operatorId":"341",
    	"amount":"10"
    }',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json',
        'Content-Type: application/json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/operators/fx-rate"
    
    payload = json.dumps({
      "operatorId": "341",
      "amount": "10"
    })
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json',
      'Content-Type': 'application/json'
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    print(response.text)
    "bundle":false,
    "data":false,
    "pin":false,
    "supportsLocalAmounts":false,
    "denominationType":"RANGE",
    "senderCurrencyCode":"USD",
    "senderCurrencySymbol":"$",
    "destinationCurrencyCode":"COP",
    "destinationCurrencySymbol":"$",
    "commission":4.42,
    "internationalDiscount":4.42,
    "localDiscount":0.00,
    "mostPopularAmount":null,
    "minAmount":5.00,
    "maxAmount":50,
    "localMinAmount":null,
    "localMaxAmount":null,
    "country":{
    "isoName":"CO",
    "name":"Colombia"
    },
    "fx":{
    "rate":2192.1867,
    "currencyCode":"COP"
    },
    "logoUrls":[
    "https://s3.amazonaws.com/rld-operator/3f4a8bcd3268-size-1.png",
    "https://s3.amazonaws.com/rld-operator/3f4a8bcd3268-size-2.png",
    "https://s3.amazonaws.com/rld-operator/3f4a8bcd3268-size-3.png"
    ],
    "fixedAmounts":[
    ],
    "fixedAmountsDescriptions":[
    ],
    "localFixedAmounts":[
    ],
    "localFixedAmountsDescriptions":[
    ],
    "suggestedAmounts":[
    7,
    10,
    15,
    20,
    25,
    30,
    35,
    40,
    45,
    50,
    55,
    60,
    65
    ],
    "suggestedAmountsMap":{
    "7":19482.51,
    "10":27832.16,
    "15":41748.23,
    "20":55664.31,
    "25":69580.39,
    "30":83496.46,
    "35":97412.54,
    "40":111328.61,
    "45":125244.69,
    "50":139160.77,
    "55":153076.84,
    "60":166992.92,
    "65":180909.00
    },
    "promotions":[
    ]
    }

    The operator's name

    bundle

    boolean

    Indicates if the operator has any existing bundle plans

    data

    boolean

    Indicates if the operator has any existing data plans

    pin

    boolean

    Indicates if the operator supports PIN transactions

    supportsLocal

    Amounts

    boolean

    Indicates if the operator can make top-ups in local amounts

    denominationType

    string

    Indicates if the operator makes top-ups through a fixed amount or a range of amounts. Options include FIXED and RANGE

    senderCurrencyCode

    string

    Indicates the currency code of the account where the top-up is being made from

    senderCurrency

    Symbol

    string

    Indicates the currency symbol of the account where the top-up is being made from

    destination

    CurrencyCode

    string

    Indicates the currency code of the mobile number where the top-up is being sent to

    destination

    CurrencySymbol

    string

    Indicates the currency symbol of the mobile number where the top-up is being sent to

    commission

    integer

    Indicates if the operator offers a commission or discount

    international

    Discount

    integer

    Indicates if the operator offers a discount for top-ups made to foreign numbers

    localDiscount

    integer

    Indicates if the operator offers a discount for top-ups made to local numbers

    mostPopularAmount

    integer

    Indicates the amount that is often used to make a top-up

    mostPopular

    LocalAmount

    integer

    Indicates the amount that is often used to make a top-up locally

    minAmount

    integer

    Indicates the minimum amount that can be used to make a top-up

    maxAmount

    integer

    Indicates the maximum amount that can be used to make a top-up

    localMinAmount

    integer

    Indicates the minimum amount that can be used to make a top-up locally

    localMaxAmount

    integer

    Indicates the maximum amount that can be used to make a top-up locally

    isoName

    string

    Indicates the country's ISO code

    name

    string

    Indicates the country's name

    rate

    integer

    Indicates the FX rate at which the top-up will be made

    currencyCode

    string

    Indicates the code of the currency at which the top-up will be made

    logoURLs

    string

    These are links to SVG images of the operator's logos

    fixedAmounts

    integer

    Indicates the fixed amounts that a top-up can be made in with the operator

    fixedAmounts

    Description

    string

    Indicates the descriptions for the operator's fixed amounts

    localFixedAmounts

    integer

    Indicates the local fixed amounts that a top-up can be made in with the operator

    localFixedAmounts

    Description

    string

    Indicates the descriptions for the operator's local fixed amounts

    suggestedAmounts

    integer

    Indicates the suggested amounts that can be used to make a top-up with the operator

    suggestedAmounts

    Map

    string

    Indicates the suggested amounts that can be mapped through

    promotions

    string

    Indicates the promotions currently offered by the operator

    "fxRate":465.00,
    "currencyCode":"HTG"
    }
    "message": "Full authentication is required to access this resource",
    "path": "/operators/fx-rate",
    "errorCode": "INVALID_TOKEN",
    "infoLink": null,
    "details": []
    }
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/operator/fx-rate"
    }

    Indicates the operator's name

    fxRate

    integer

    Indicates the exchange rate of the operator's currency to your account's currency. For example, if your account is in Indian Rupees( INR ) and you are making a top-up to a number registered to Natcom Haiti, the exchange rate returned will be 1.16 ( 1 INR = 1.16 HTG )

    currencyCode

    string

    Indicates the currency symbol of the country where the operator is registered

    localPercentage

    integer

    Indicates the percentage discount for local top-ups

    updatedAt

    integer

    Indicates the time the discount was first created by the operator

    operatorId

    string

    Indicates the operator's ID

    name

    string

    Indicates the operator's name

    countryCode

    string

    Indicates the ISO code of the country where the operator is registered

    data

    boolean

    Indicates if the operator has any existing data discounts

    bundle

    boolean

    Indicates if the operator has any existing bundle discounts

    status

    boolean

    Indicates if the operator has any existing discounts

    size

    integer

    The number of operators offering discounts to be retrieved on a page. Default value is 200

    page

    integer

    The page of the list of operators offering discounts. Default value is 1

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    Parameter

    Type

    Description

    percentage

    integer

    Indicates the percentage discount for every top-up

    international

    Percentage

    integer

    {
      "content":[
        {
          "operator":{
            "operatorId":1,
            "name":"Afghan Wireless Afghanistan",
            "countryCode":"AF",
            "status":true,
            "bundle":false
          },
          "percentage":10,
          "internationalPercentage":10,
          "localPercentage":0,
          "updatedAt":"2018-06-26 03:36:16"
        },
        {
          "operator":{
            "operatorId":2,
            "name":"MTN Afghanistan",
            "countryCode":"AF",
            "status":true,
            "bundle":false
          },
          "percentage":10,
          "internationalPercentage":10,
          "localPercentage":0,
          "updatedAt":"2018-06-26 03:36:16"
        },
        {
          "operator":{
            "operatorId":3,
            "name":"Etisalat Afghanistan",
            "countryCode":"AF",
            "status":true,
            "bundle":false
          },
          "percentage":10,
          "internationalPercentage":10,
          "localPercentage":0,
          "updatedAt":"2018-06-26 03:36:16"
        }
      ],
      "pageable":{
        "sort":{
          "unsorted":true,
          "sorted":false
        },
        "pageSize":3,
        "pageNumber":0,
        "offset":0,
        "paged":true,
        "unpaged":false
      },
      "totalPages":204,
      "totalElements":611,
      "last":false,
      "sort":{
        "unsorted":true,
        "sorted":false
      },
      "first":true,
      "numberOfElements":3,
      "size":3,
      "number":0
    }

    Indicates the percentage discount for international top-ups

    boolean

    Indicates if PIN details for the operator should be included in the API response. Default value is True

    includeData

    boolean

    Indicates if any airtime or data plans being offered by the operator should be included in the API response. Default value is true

    includesBundles

    boolean

    Indicates if any airtime and data bundles being offered by the operator should be included in the API response. Default value is true

    bundle

    boolean

    Indicates if the operator has any existing bundle plans

    data

    boolean

    Indicates if the operator has any existing data plans.

    pin

    boolean

    Indicates if the operator supports PIN transactions

    supportsLocal

    Amounts

    boolean

    Indicates if the operator can make top-ups in local amounts

    denominationType

    string

    Indicates if the operator makes top-ups through a fixed amount or a range of amounts. Options include FIXED and RANGE

    senderCurrencyCode

    string

    Indicates the currency code of the account where the top-up is being made from

    senderCurrency

    Symbol

    string

    Indicates the currency symbol of the account where the top-up is being made from

    destinationCurrencyCode

    string

    Indicates the currency code of the mobile number where the top-up is being sent to

    destinationCurrencySymbol

    string

    Indicates the currency symbol of the mobile number where the top-up is being sent to

    commission

    integer

    Indicates if the operator offers a commission or discount

    international

    Discount

    integer

    Indicates if the operator offers a discount for top-ups made to foreign numbers

    localDiscount

    integer

    Indicates if the operator offers a discount for top-ups made to local numbers

    mostPopularAmount

    integer

    Indicates the amount that is often used to make a top-up

    mostPopular

    LocalAmount

    integer

    Indicates the amount that is often used to make a top-up locally

    minAmount

    integer

    Indicates the minimum amount that can be used to make a top-up

    maxAmount

    integer

    Indicates the maximum amount that can be used to make a top-up

    localMinAmount

    integer

    Indicates the minimum amount that can be used to make a top-up locally

    localMaxAmount

    integer

    Indicates the maximum amount that can be used to make a top-up locally

    isoName

    string

    Indicates the country's ISO code

    name

    string

    Indicates the country's name

    rate

    integer

    Indicates the FX rate at which the top-up will be made

    currencyCode

    string

    Indicates the code of the currency at which the top-up will be made

    logoURLs

    string

    These are links to SVG images of the operator's logos

    fixedAmounts

    integer

    Indicates the fixed amounts that a top-up can be made in with the operator

    fixedAmounts

    Description

    string

    Indicates the descriptions for the operator's fixed amounts

    localFixedAmounts

    integer

    Indicates the local fixed amounts that a top-up can be made in with the operator

    localFixedAmounts

    Description

    string

    Indicates the descriptions for the operator's local fixed amounts

    suggestedAmounts

    integer

    Indicates the suggested amounts that can be used to make a top-up with the operator

    suggested

    AmountsMap

    string

    Indicates the suggested amounts that can be mapped through

    promotions

    string

    Indicates the promotions currently offered by the operator

    locationName

    string

    This is the name of a geographical location that has a different recharge plan

    fixedAmounts

    integer

    Indicates the fixed amounts that a top-up can be made in with the operator

    localAmounts

    integer

    Indicates the local amounts that a top-up can be made in with the operator

    fixedAmounts

    PlanNames

    string

    Indicates the plan name (top-up, data, or bundle) for each fixed amount provided by the operator

    fixedAmounts

    Descriptions

    string

    Indicates the plan description (top-up, data, or bundle) for each fixed amount provided by the operator

    localFixedAmounts

    PlanNames

    string

    Indicates the plan name (top-up, data, or bundle) for each local fixed amount provided by the operator

    localFixedAmounts

    PlanDescriptions

    string

    Indicates the plan description (top-up, data, or bundle) for each local fixed amount provided by the operator

    countryCode*

    string

    The ISO code of the country where the operator is registered

    suggested AmountsMap

    boolean

    Indicates if the suggestedAmountsMap field should be returned. Default value is false

    suggested Amounts

    boolean

    Indicates if the suggestedAmounts field should be returned. Default value is false

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    Parameter

    Type

    Description

    id/operatorId

    integer

    The ID of the operator

    name

    string

    Parameter

    Type

    Description

    geographical

    RechargePlans

    object

    Indicates an object that contains the details of each geographical plan owned by the operator within a country

    locationCode

    string

    {
      "operatorId":88,
      "name":"Movistar Colombia",
      "bundle":false,
      "data":false,
      "pin":false,
      "supportsLocalAmounts":false,
      "denominationType":"RANGE",
      "senderCurrencyCode":"USD",
      "senderCurrencySymbol":"$",
      "destinationCurrencyCode":"COP",
      "destinationCurrencySymbol":"$",
      "commission":4.42,
      "internationalDiscount":4.42,
      "localDiscount":0.00,
      "mostPopularAmount":null,
      "minAmount":5.00,
      "maxAmount":50,
      "localMinAmount":null,
      "localMaxAmount":null,
      "country":{
        "isoName":"CO",
        "name":"Colombia"
      },
      "fx":{
        "rate":2192.1867,
        "currencyCode":"COP"
      },
      "logoUrls":[
        "https://s3.amazonaws.com/rld-operator/3f4a8bcd3268-size-1.png",
        "https://s3.amazonaws.com/rld-operator/3f4a8bcd3268-size-2.png",
        "https://s3.amazonaws.com/rld-operator/3f4a8bcd3268-size-3.png"
      ],
      "fixedAmounts":[
        
      ],
      "fixedAmountsDescriptions":[
        
      ],
      "localFixedAmounts":[
        
      ],
      "localFixedAmountsDescriptions":[
        
      ],
      "suggestedAmounts":[
        7,
        10,
        15,
        20,
        25,
        30,
        35,
        40,
        45,
        50,
        55,
        60,
        65
      ],
      "suggestedAmountsMap":{
        "7":19482.51,
        "10":27832.16,
        "15":41748.23,
        "20":55664.31,
        "25":69580.39,
        "30":83496.46,
        "35":97412.54,
        "40":111328.61,
        "45":125244.69,
        "50":139160.77,
        "55":153076.84,
        "60":166992.92,
        "65":180909.00
      },
      "promotions":[
        
      ]
    }

    includePin

    The operator's name

    This is an abbreviation for the geographical location that has a different recharge plan. Examples include “AP” for “Andhra Pradesh” or “DEL” for “Delhi”

    title1

    string

    Indicates the duration of the promotion and the name of the operator offering it

    title2

    string

    Indicates additional information on the promotion

    description

    string

    This indicates a summary of what the promotion is about

    startDate

    string

    The date the promotion begins

    endDate

    string

    The date the promotion ends

    denominations

    string

    Indicates the top-up amounts that are eligible for the promotion

    localDenominations

    string

    Indicates the local top-up amounts in the destination's currency that are eligible for the promotion

    size

    integer

    The number of operators offering discounts to be retrieved on a page. Default value is 200

    page

    integer

    The page of the list of operators offering promotions. Default value is 1

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    Parameter

    Type

    Description

    promotionId

    integer

    This is a unique identifier for the ongoing promotion

    operatorId

    integer

    {
      "content":[
        {
          "promotionId":1,
          "operatorId":129,
          "title":"Tigo El Salvador From 25 Jun 2018 00:00 To 25 July...",
          "title2":"Get 500 MB and 150 minutes for USA or Canada",
          "description":"For top ups of $10 or more, customer...",
          "startDate":"Mon, 25 Jun 2018 06:00:00 +0000",
          "endDate":"Tue, 26 Jun 2018 05:59:00 +0000",
          "denominations":"USD 10 and up",
          "localDenominations":null
        },
        {
          "promotionId":2,
          "operatorId":158,
          "title":"Tigo Guatemala From 30 Jun 2018 00:00 To 30 Jun",
          "title2":"Bonus 3x",
          "description":"Calls and SMS to USA, OnNet an...",
          "startDate":"Sat, 30 Jun 2018 06:00:00 +0000",
          "endDate":"Sun, 01 Jul 2018 05:59:00 +0000",
          "denominations":"USD 14 and up",
          "localDenominations":"GTQ 100.80 and up"
        }
      ],
      "pageable":{
        "sort":{
          "unsorted":true,
          "sorted":false
        },
        "pageSize":3,
        "pageNumber":0,
        "offset":0,
        "paged":true,
        "unpaged":false
      },
      "totalPages":15,
      "totalElements":44,
      "last":false,
      "sort":{
        "unsorted":true,
        "sorted":false
      },
      "first":true,
      "numberOfElements":3,
      "size":3,
      "number":0
    }

    Indicates the ID of the operator offering the promotion

    {
      "timeStamp":"2021-06-09 23:24:30",
      "message":"Full authentication is required to access this resource",
      "path":"/operators/commissions",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    {
      "timestamp":"2021-06-09T23:22:56.125+0000",
      "status":404,
      "error":"Not Found",
      "message":"No message available",
      "path":"/operator/commissions"
    }
    curl --location --request GET 'https://topups.reloadly.com/operators/commissions' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' 
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/operators/commissions");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/operators/commissions"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/operators/commissions")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/operators/commissions',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/operators/commissions',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json',
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/operators/commissions"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json',
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    {
      "timestamp":"2021-05-17T15:37:28.104+0000",
      "status":404,
      "error":"Not Found",
      "message":"No message available",
      "path":"/operator/countries/CO"
    }
    {
       "id":200,
       "operatorId":200,
       "name":"Airtel India",
       "bundle":false,
       "data":false,
       "pin":false,
       "supportsLocalAmounts":false,
       "supportsGeographicalRechargePlans":true,
       "denominationType":"FIXED",
       "senderCurrencyCode":"NGN",
       "senderCurrencySymbol":"₦",
       "destinationCurrencyCode":"INR",
       "destinationCurrencySymbol":"₹",
       "commission":17.0,
       "internationalDiscount":17.0,
       "localDiscount":0.5,
       "mostPopularAmount":null,
       "mostPopularLocalAmount":null,
       "minAmount":null,
       "maxAmount":null,
       "localMinAmount":null,
       "localMaxAmount":null,
       "country":{
          "isoName":"IN",
          "name":"India"
       },
       "fx":{
          "rate":0.14094,
          "currencyCode":"INR"
       },
       "logoUrls":[
          "https://s3.amazonaws.com/rld-operator/48a34cc8-a395-43b2-848d-8caa7af71649-size-1.png",
          "https://s3.amazonaws.com/rld-operator/48a34cc8-a395-43b2-848d-8caa7af71649-size-2.png",
          "https://s3.amazonaws.com/rld-operator/48a34cc8-a395-43b2-848d-8caa7af71649-size-3.png"
       ],
       "fixedAmounts":[
          
       ],
       "fixedAmountsDescriptions":{
          
       },
       "localFixedAmounts":[
          
       ],
       "localFixedAmountsDescriptions":{
          
       },
       "suggestedAmounts":[
          
       ],
       "suggestedAmountsMap":{
          
       },
       "geographicalRechargePlans":[
          {
             "locationCode":"ASM",
             "locationName":"Assam",
             "fixedAmounts":[
                69.87,
                139.74,
                706.92,
                3542.82,
                7085.64,
                35432.31
             ],
             "localAmounts":[
                10.00,
                20.00,
                100.00,
                500.00,
                1000.00,
                5000.00
             ],
             "fixedAmountsPlanNames":{
                "0.17":"Topup Plan",
                "0.34":"Topup Plan",
                "1.72":"Topup Plan",
                "8.62":"Topup Plan",
                "17.24":"Topup Plan",
                "86.21":"Topup Plan"
             },
             "fixedAmountsDescriptions":{
                "69.87":"Get Talktime of Rs. 7.47. Validity : 0 Days. Talk time : 7.47",
                "139.74":"Get Talktime of Rs. 14.95. Validity : 0 Days. Talk time : 14.95",
                "706.92":"Get Talktime of Rs. 81.75. Validity : 0 Days. Talk time : 81.75",
                "3542.82":"Get Talktime of Rs. 423.73. Validity : 0 Days. Talk time : 423.73",
                "7085.64":"Get Talktime of Rs. 847.46. Validity : 0 Days. Talk time : 847.46",
                "35432.31":"Get Talktime of Rs. 4237.29. Validity : 0 Days. Talk time : 4237.29"
             },
             "localFixedAmountsPlanNames":{
                "10.00":"Topup Plan",
                "20.00":"Topup Plan",
                "100.00":"Topup Plan",
                "500.00":"Topup Plan",
                "1000.00":"Topup Plan",
                "5000.00":"Topup Plan"
             },
             "localFixedAmountsDescriptions":{
                "10.00":"Get Talktime of Rs. 7.47. Validity : 0 Days. Talk time : 7.47",
                "20.00":"Get Talktime of Rs. 14.95. Validity : 0 Days. Talk time : 14.95",
                "100.00":"Get Talktime of Rs. 81.75. Validity : 0 Days. Talk time : 81.75",
                "500.00":"Get Talktime of Rs. 423.73. Validity : 0 Days. Talk time : 423.73",
                "1000.00":"Get Talktime of Rs. 847.46. Validity : 0 Days. Talk time : 847.46",
                "5000.00":"Get Talktime of Rs. 4237.29. Validity : 0 Days. Talk time : 4237.29"
             }
          },
          {
             "locationCode":"PUN",
             "locationName":"Punjab",
             "fixedAmounts":[
                69.87,
                139.74,
                706.92,
                3542.82,
                7085.64,
                35432.31
             ],
             "localAmounts":[
                10.00,
                20.00,
                100.00,
                500.00,
                1000.00,
                5000.00
             ],
             "fixedAmountsPlanNames":{
                "0.17":"Topup Plan",
                "0.34":"Topup Plan",
                "1.72":"Topup Plan",
                "8.62":"Topup Plan",
                "17.24":"Topup Plan",
                "86.21":"Topup Plan"
             },
             "fixedAmountsDescriptions":{
                "69.87":"Get Talktime of Rs. 7.47. Validity : 0 Days. Talk time : 7.47",
                "139.74":"Get Talktime of Rs. 14.95. Validity : 0 Days. Talk time : 14.95",
                "706.92":"Get Talktime of Rs. 81.75. Validity : 0 Days. Talk time : 81.75",
                "3542.82":"Get Talktime of Rs. 423.73. Validity : 0 Days. Talk time : 423.73",
                "7085.64":"Get Talktime of Rs. 847.46. Validity : 0 Days. Talk time : 847.46",
                "35432.31":"Get Talktime of Rs. 4237.29. Validity : 0 Days. Talk time : 4237.29"
             },
             "localFixedAmountsPlanNames":{
                "10.00":"Topup Plan",
                "20.00":"Topup Plan",
                "100.00":"Topup Plan",
                "500.00":"Topup Plan",
                "1000.00":"Topup Plan",
                "5000.00":"Topup Plan"
             },
             "localFixedAmountsDescriptions":{
                "10.00":"Get Talktime of Rs. 7.47. Validity : 0 Days. Talk time : 7.47",
                "20.00":"Get Talktime of Rs. 14.95. Validity : 0 Days. Talk time : 14.95",
                "100.00":"Get Talktime of Rs. 81.75. Validity : 0 Days. Talk time : 81.75",
                "500.00":"Get Talktime of Rs. 423.73. Validity : 0 Days. Talk time : 423.73",
                "1000.00":"Get Talktime of Rs. 847.46. Validity : 0 Days. Talk time : 847.46",
                "5000.00":"Get Talktime of Rs. 4237.29. Validity : 0 Days. Talk time : 4237.29"
             }
          }
       ],
       "promotions":[
          
       ]
    }
    {
      "timeStamp":"2021-05-17 15:51:26",
      "message":"Invalid country code, see https://www.iban.com/country-codes",
      "path":"/operators/countries/COT",
      "errorCode":null,
      "infoLink":null,
      "details":[
        
      ]
    }
    {
      "timeStamp":"2021-05-12 07:17:42",
      "message":"Full authentication is required to access this resource",
      "path":"/operators/countries/SV",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    curl --location --request GET 'https://topups.reloadly.com/operators/countries/PK?includeBundles=true&includeData=true&includePin=true&suggestedAmounts=true&suggestedAmountsMap=true' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' \
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/operators/countries/PK?includeBundles=true&includeData=true&includePin=true&suggestedAmounts=true&suggestedAmountsMap=true");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
        
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/operators/countries/PK?includeBundles=true&includeData=true&includePin=true&suggestedAmounts=true&suggestedAmountsMap=true"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/operators/countries/PK?includeBundles=true&includeData=true&includePin=true&suggestedAmounts=true&suggestedAmountsMap=true")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .addHeader("Content-Type", "application/json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/operators/countries/PK?includeBundles=true&includeData=true&includePin=true&suggestedAmounts=true&suggestedAmountsMap=true',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
        'Content-Type': 'application/json'
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/operators/countries/PK?includeBundles=true&includeData=true&includePin=true&suggestedAmounts=true&suggestedAmountsMap=true',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json',
        'Content-Type: application/json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    
    import requests
    import json
    
    url = "https://topups.reloadly.com/operators/countries/PK?includeBundles=true&includeData=true&includePin=true&suggestedAmounts=true&suggestedAmountsMap=true"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json',
      'Content-Type': 'application/json'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    {
      "timeStamp":"2021-05-11 21:14:00",
      "message":"Full authentication is required to access this resource",
      "path":"/promotions",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    {
      "timestamp":"2021-05-18T11:35:57.291+0000",
      "status":404,
      "error":"Not Found",
      "message":"No message available",
      "path":"/promotion"
    }
    curl --location --request GET 'https://topups.reloadly.com/promotions' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' 
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/promotions");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/promotions"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/promotions")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/promotions',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/promotions',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    
    import requests
    import json
    
    url = "https://topups.reloadly.com/promotions"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    hashtag
    Path Parameters
    Name
    Type
    Description

    promotionId

    integer

    The promotion's ID

    hashtag
    Headers

    Name
    Type
    Description

    Authorization

    string

    Your access token is required as a bearer token in the request's header

    {
      "promotionId":5,
      "operatorId":114,
    
    {
      "timeStamp":"2021-05-18 14:27:36",
      "message":
    

    hashtag

    hashtag
    Request samples

    hashtag
    Response parameters

    Parameter

    Type

    Description

    promotionId

    integer

    The promotion ID. This is a unique identifier for the ongoing promotion

    operatorId

    integer

    hashtag
    Path Parameters
    Name
    Type
    Description

    operatorId

    integer

    The ID of the operator whose promotion information is being retrieved

    hashtag
    Headers

    Name
    Type
    Description

    Authorization

    string

    Your access token is required as a bearer token in the request's header

    [
      {
        "id":8934,
        
    
    {
      "timeStamp":"2021-06-09 20:13:16",
      "message":
    

    hashtag
    Request samples

    hashtag
    Response parameters

    Parameter

    Type

    Description

    promotionId

    integer

    The promotion ID. This is a unique identifier for the ongoing promotion

    operatorId

    integer

    hashtag
    Query Parameters
    Name
    Type
    Description

    page

    integer

    The page of the operator list being retrieved. Default is 1

    size

    integer

    The number of transactions to be retrieved on a page. Default is 100

    hashtag
    Headers

    Name
    Type
    Description

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    {
      "content": [
        {
          
    

    hashtag

    hashtag
    Request samples

    hashtag

    hashtag
    Response parameters

    Parameter

    Type

    Description

    transactionId

    integer

    Indicates the unique ID of a top-up

    status

    string

    hashtag
    Path Parameters
    Name
    Type
    Description

    countryCode

    string

    Indicates the ISO code of the country whose promotions need to be retrieved

    hashtag
    Headers

    Name
    Type
    Description

    Authorization

    string

    Your access token is required as a bearer token in the request's header

    [
      {
        "promotionId":7016,
        
    

    hashtag
    Request samples

    hashtag
    Response parameters

    Parameter

    Type

    Description

    promotionId

    integer

    The promotion ID. This is a unique identifier for the ongoing promotion

    operatorId

    integer

    hashtag
    Headers
    Name
    Type
    Description

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    hashtag
    Request Body

    Name
    Type
    Description

    operatorId*

    integer

    Indicates the operator's ID

    amount*

    integer

    Indicates the amount of airtime or data that is to be recharged

    {
        "transactionId": 26523,
        "status":
    

    hashtag

    hashtag
    Request samples

    hashtag
    Request samples for Nauta Cuba top-ups

    hashtag
    Response parameters

    Parameter

    Type

    Description

    transactionId

    integer

    Indicates the unique ID of a top-up

    status

    string

    Flowchart for an airtime top-up
    POST
    https://topups.reloadly.com/topups-async

    hashtag
    Headers

    Name
    Type
    Description

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    hashtag
    Request Body

    Name
    Type
    Description

    operatorId*

    integer

    Indicates the operator's ID

    amount*

    integer

    Indicates the amount of airtime or data that is to be recharged

    {
      "transactionId": 282571
    }
    {
      "timeStamp":"2021-06-08 12:00:54",
      "message":
    
    {
      "timestamp":"2021-06-08T12:20:51.818+0000",
      "status"
    

    hashtag
    Request samples

    hashtag

    hashtag
    Request samples for Nauta Cuba top-ups

    hashtag
    Response parameters

    Parameter

    Type

    Description

    transactionId

    integer

    Indicates the unique ID of an asynchronous top-up which is used to confirm its status

    Flowchart for an asynchronous top-up

    Get the status of a top-up

    With the /{{transactionId}}/status endpoint, the status of a top-up can be determined in real-time

    hashtag
    Top-up status

    GET https://topups.reloadly.com/topups/{{transactionId}}/status

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag

    hashtag
    Request samples

    hashtag
    Response parameters

    Error Codes

    Here is a comprehensive breakdown of all client and server-side errors that can occur during usage of the Airtime API.

    Error Code

    Description

    COUNTRY_NOT_SUPPORTED

    The specified country in the request is currently disabled or not supported.

    Get transaction by ID

    With the topups/reports/transactions/{transactionid} endpoint, you can retrieve information on a top-up transaction by making a request with the transaction's ID

    hashtag
    Transaction by ID

    GET https://topups.reloadly.com/topups/reports/transactions/{transactionid}

    hashtag
    Path Parameters

    Name
    Type
    Description

    hashtag
    Headers

    Name
    Type
    Description

    hashtag

    hashtag
    Request samples

    hashtag

    hashtag
    Response parameters

    {
      "timestamp":"2021-05-18T15:29:50.022+0000",
      "status":404,
      "error":"Not Found",
      "message":"No message available",
      "path":"/promotion/6984"
    }
    curl --location --request GET 'https://topups.reloadly.com/promotions/8652' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' 
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/promotions/8652");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/promotions/8652"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/promotions/8652")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/promotions/8652',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/promotions/8652',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json',
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/promotions/8652"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    {
      "timestamp":"2021-06-09T20:17:45.467+0000",
      "status":404,
      "error":"Not Found",
      "message":"No message available",
      "path":"/promotions/operator/344"
    }
    curl --location --request GET 'https://topups.reloadly.com/promotions/operators/129' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' 
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/promotions/operators/129");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/promotions/operators/129"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/promotions/operators/129")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/promotions/operators/129',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/promotions/operators/129',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/promotions/operators/129"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    {
      "timeStamp":"2021-06-09 22:43:05",
      "message":"Full authentication is required to access this resource",
      "path":"/topups/reports/transactions",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    {
      "timestamp":"2021-06-09T22:45:07.750+0000",
      "status":404,
      "error":"Not Found",
      "message":"No message available",
      "path":"/topups/reports/transaction"
    }
    curl --location --request GET 'https://topups.reloadly.com/topups/reports/transactions' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' 
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Post, "https://topups.reloadly.com/topups/reports/transactions");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/topups/reports/transactions"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/topups/reports/transactions")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/topups/reports/transactions',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/topups/reports/transactions',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/topups/reports/transactions"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    {
      "timeStamp":"2021-06-09 19:23:18",
      "message":"Full authentication is required to access this resource",
      "path":"/promotions/country-codes/NG",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    {
      "timestamp":"2021-06-09T20:19:59.418+0000",
      "status":404,
      "error":"Not Found",
      "message":"No message available",
      "path":"/promotion/country-code/NG"
    }
    curl --location --request GET 'https://topups.reloadly.com/promotions/country-codes/SV' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' 
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/promotions/country-codes/SV");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/promotions/country-codes/SV"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/promotions/country-codes/SV")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/promotions/country-codes/SV',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/promotions/country-codes/SV',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/promotions/country-codes/SV"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    {
      "timeStamp":"2021-05-31 18:38:03",
      "message":"Recipient phone number is not valid",
      "path":"/topups",
      "errorCode":"INVALID_RECIPIENT_PHONE",
      "infoLink":null,
      "details":[
        
      ]
    }
    {
      "timeStamp":"2021-05-31 17:48:18",
      "message":"Full authentication is required to access this resource",
      "path":"/topup",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    curl --location --request POST 'https://topups.reloadly.com/topups' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    	"operatorId":"341",
    	"amount":"10",
    	"useLocalAmount": false,
    	"customIdentifier": "This is example identifier 092",
    	"recipientPhone": {
    		"countryCode": "NG",
    		"number": "08147658721"
    	},
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }'
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var json = JsonConvert.SerializeObject(new {
              operatorId = "341",
              amount = "10",
              useLocalAmount = false,
              customIdentifier = "This is a sample",
              recipientPhone = new {
                countryCode = "NG", 
                number = "08147658721"
              }
          });
    
          var message = new HttpRequestMessage(HttpMethod.Post, "https://topups.reloadly.com/topups"){
            Content = new StringContent(json, Encoding.UTF8, "application/json")
          };
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "strings"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/topups"
      method := "POST"
    
      payload := strings.NewReader(`{
    	"operatorId":"341",
    	"amount":"10",
    	"useLocalAmount": false,
    	"customIdentifier": "This is example identifier 092",
    	"recipientPhone": {
    		"countryCode": "NG",
    		"number": "08147658721"
    	},
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }`)
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, payload)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
      req.Header.Add("Content-Type", "application/json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, "{\n\t\"operatorId\":\"685\",\n\t\"amount\":\"10\",\n\t\"customIdentifier\": \"This is example identifier 092\",\n\t\"recipientPhone\": {\n\t\t\"countryCode\": \"NG\",\n\t\t\"number\": \"08147658721\"\n\t},\n\t\"senderPhone\": {\n\t\t\"countryCode\": \"CA\",\n\t\t\"number\": \"1231231231\"\n\t}\n}");
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/topups")
      .method("POST", body)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .addHeader("Content-Type", "application/json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'POST',
      'url': 'https://topups.reloadly.com/topups',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        "operatorId": "341",
        "amount": "10",
        "useLocalAmount": false,
        "customIdentifier": "This is example identifier 092",
        "recipientPhone": {
          "countryCode": "NG",
          "number": "08147658721"
        },
        "senderPhone": {
          "countryCode": "CA",
          "number": "1231231231"
        }
      })
    
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/topups',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS =>'{
    	"operatorId":"341",
    	"amount":"10",
    	"useLocalAmount": false,
    	"customIdentifier": "This is example identifier 092",
    	"recipientPhone": {
    		"countryCode": "NG",
    		"number": "08147658721"
    	},
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json',
        'Content-Type: application/json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/topups"
    
    payload = json.dumps({
      "operatorId": "341",
      "amount": "10",
      "useLocalAmount": False,
      "customIdentifier": "This is example identifier 092",
      "recipientPhone": {
        "countryCode": "NG",
        "number": "08147658721"
      },
      "senderPhone": {
        "countryCode": "CA",
        "number": "1231231231"
      }
    })
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json',
      'Content-Type': 'application/json'
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    print(response.text)
    curl --location --request POST 'https://topups.reloadly.com/topups' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    	"operatorId":"685",
    	"amount":"10",
    	"customIdentifier": "This is example identifier 092",
    	"recipientEmail": "anyone@nauta.com.cu",
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }'
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var json = JsonConvert.SerializeObject(new {
            operatorId = "685",
              amount = "10",
              customIdentifier = "This is a sample",
              recipientEmail = "peter@nauta.com.cu"
              senderPhone = new {
                countryCode = "CA", 
                number = "1231231231"
              }
          });
    
          var message = new HttpRequestMessage(HttpMethod.Post, "https://topups.reloadly.com/topups"){
            Content = new StringContent(json, Encoding.UTF8, "application/json")
          };
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "strings"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/topups"
      method := "POST"
    
      payload := strings.NewReader(`{
    	"operatorId":"685",
    	"amount":"10",
    	"customIdentifier": "This is example identifier 092",
    	"recipientEmail": "peter@nauta.com.cu",
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }`)
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, payload)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
      req.Header.Add("Content-Type", "application/json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, "{\n\t\"operatorId\":\"685\",\n\t\"amount\":\"10\",\n\t\"customIdentifier\": \"This is example identifier 092\",\n\t\"recipientEmail\": \"peter@nauta.com.cu\",\n\t\"senderPhone\": {\n\t\t\"countryCode\": \"CA\",\n\t\t\"number\": \"1231231231\"\n\t}\n}");
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/topups")
      .method("POST", body)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .addHeader("Content-Type", "application/json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'POST',
      'url': 'https://topups.reloadly.com/topups',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        "operatorId": "685",
        "amount": "10",
        "customIdentifier": "This is example identifier 092",
        "recipientEmail": "peter@nauta.com.cu",
        "senderPhone": {
          "countryCode": "CA",
          "number": "1231231231"
        }
      })
    
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/topups',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS =>'{
    	"operatorId":"685",
    	"amount":"10",
    	"customIdentifier": "This is example identifier 092",
    	"recipientEmail": "peter@nauta.com.cu",
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json',
        'Content-Type: application/json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/topups"
    
    payload = json.dumps({
      "operatorId": "685",
      "amount": "10",
      "customIdentifier": "This is example identifier 092",
      "recipientEmail": "peter@nauta.com.cu",
      "senderPhone": {
        "countryCode": "CA",
        "number": "1231231231"
      }
    })
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json',
      'Content-Type': 'application/json'
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    print(response.text)
    curl --location --request POST 'https://topups.reloadly.com/topups-async' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    	"operatorId":"341",
    	"amount":"10",
    	"useLocalAmount": false,
    	"customIdentifier": "This is example identifier 092",
    	"recipientPhone": {
    		"countryCode": "NG",
    		"number": "08147658721"
    	},
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }'
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var json = JsonConvert.SerializeObject(new {
              operatorId = "341",
              amount = "10",
              useLocalAmount = false,
              customIdentifier = "This is a sample",
              recipientPhone = new {
                countryCode = "NG", 
                number = "08147658721"
              }
          });
    
          var message = new HttpRequestMessage(HttpMethod.Post, "https://topups.reloadly.com/topups-async"){
            Content = new StringContent(json, Encoding.UTF8, "application/json")
          };
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "strings"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/topups-async"
      method := "POST"
    
      payload := strings.NewReader(`{
    	"operatorId":"341",
    	"amount":"10",
    	"useLocalAmount": false,
    	"customIdentifier": "This is example identifier 092",
    	"recipientPhone": {
    		"countryCode": "NG",
    		"number": "08147658721"
    	},
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }`)
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, payload)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
      req.Header.Add("Content-Type", "application/json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, "{\n\t\"operatorId\":\"685\",\n\t\"amount\":\"10\",\n\t\"customIdentifier\": \"This is example identifier 092\",\n\t\"recipientPhone\": {\n\t\t\"countryCode\": \"NG\",\n\t\t\"number\": \"08147658721\"\n\t},\n\t\"senderPhone\": {\n\t\t\"countryCode\": \"CA\",\n\t\t\"number\": \"1231231231\"\n\t}\n}");
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/topups-async")
      .method("POST", body)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .addHeader("Content-Type", "application/json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'POST',
      'url': 'https://topups.reloadly.com/topups-async',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        "operatorId": "341",
        "amount": "10",
        "useLocalAmount": false,
        "customIdentifier": "This is example identifier 092",
        "recipientPhone": {
          "countryCode": "NG",
          "number": "08147658721"
        },
        "senderPhone": {
          "countryCode": "CA",
          "number": "1231231231"
        }
      })
    
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/topups-async',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS =>'{
    	"operatorId":"341",
    	"amount":"10",
    	"useLocalAmount": false,
    	"customIdentifier": "This is example identifier 092",
    	"recipientPhone": {
    		"countryCode": "NG",
    		"number": "08147658721"
    	},
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json',
        'Content-Type: application/json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/topups-async"
    
    payload = json.dumps({
      "operatorId": "341",
      "amount": "10",
      "useLocalAmount": False,
      "customIdentifier": "This is example identifier 092",
      "recipientPhone": {
        "countryCode": "NG",
        "number": "08147658721"
      },
      "senderPhone": {
        "countryCode": "CA",
        "number": "1231231231"
      }
    })
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json',
      'Content-Type': 'application/json'
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    print(response.text)
    curl --location --request POST 'https://topups.reloadly.com/topups-async' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' \
    --header 'Content-Type: application/json' \
    --data-raw '{
    	"operatorId":"685",
    	"amount":"10",
    	"customIdentifier": "This is example identifier 092",
    	"recipientEmail": "peter@nauta.com.cu",
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }'
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var json = JsonConvert.SerializeObject(new {
            operatorId = "685",
              amount = "10",
              customIdentifier = "This is a sample",
              recipientEmail = "peter@nauta.com.cu"
              senderPhone = new {
                countryCode = "CA", 
                number = "1231231231"
              }
          });
    
          var message = new HttpRequestMessage(HttpMethod.Post, "https://topups.reloadly.com/topups-async"){
            Content = new StringContent(json, Encoding.UTF8, "application/json")
          };
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "strings"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/topups-async"
      method := "POST"
    
      payload := strings.NewReader(`{
    	"operatorId":"685",
    	"amount":"10",
    	"customIdentifier": "This is example identifier 092",
    	"recipientEmail": "peter@nauta.com.cu",
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }`)
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, payload)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
      req.Header.Add("Content-Type", "application/json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, "{\n\t\"operatorId\":\"685\",\n\t\"amount\":\"10\",\n\t\"customIdentifier\": \"This is example identifier 092\",\n\t\"recipientEmail\": \"peter@nauta.com.cu\",\n\t\"senderPhone\": {\n\t\t\"countryCode\": \"CA\",\n\t\t\"number\": \"1231231231\"\n\t}\n}");
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/topups-async")
      .method("POST", body)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .addHeader("Content-Type", "application/json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'POST',
      'url': 'https://topups.reloadly.com/topups-async',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        "operatorId": "685",
        "amount": "10",
        "customIdentifier": "This is example identifier 092",
        "recipientEmail": "peter@nauta.com.cu",
        "senderPhone": {
          "countryCode": "CA",
          "number": "1231231231"
        }
      })
    
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/topups-async',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS =>'{
    	"operatorId":"685",
    	"amount":"10",
    	"customIdentifier": "This is example identifier 092",
    	"recipientEmail": "peter@nauta.com.cu",
    	"senderPhone": {
    		"countryCode": "CA",
    		"number": "1231231231"
    	}
    }',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json',
        'Content-Type: application/json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/topups-async"
    
    payload = json.dumps({
      "operatorId": "685",
      "amount": "10",
      "customIdentifier": "This is example identifier 092",
      "recipientEmail": "peter@nauta.com.cu",
      "senderPhone": {
        "countryCode": "CA",
        "number": "1231231231"
      }
    })
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json',
      'Content-Type': 'application/json'
    }
    
    response = requests.request("POST", url, headers=headers, data=payload)
    
    print(response.text)
    "title":"Movistar Ecuador From 01 Jan 2018 00:00 To 01 Jul 20",
    "title2":"Bonus 2x",
    "description":"For top ups of USD$2.00 (EUR 5) or more",
    "startDate":"Mon, 01 Jan 2018 05:00:00 +0000",
    "endDate":"Mon, 02 Jul 2018 04:59:00 +0000",
    "denominations":"USD 2 and up",
    "localDenominations":null
    }
    "Full authentication is required to access this resource"
    ,
    "path":"/promotions/6984",
    "errorCode":"INVALID_TOKEN",
    "infoLink":null,
    "details":[
    ]
    }

    Indicates the ID of the operator offering the promotion

    title1

    string

    Indicates the duration of the promotion and the name of the operator offering it

    title2

    string

    Indicates additional information on the promotion

    description

    string

    This indicates a summary of what the promotion is about

    startDate

    string

    The date the promotion begins

    endDate

    string

    The date the promotion ends

    denominations

    string

    Indicates the top-up amounts that are eligible for the promotion

    localDenominations

    string

    Indicates the local top-up amounts in the destination's currency that are eligible for the promotion

    "
    promotionId
    "
    :8934,
    "operatorId":344,
    "title":"Glo Mobile Nigeria From 06 Jun 2021 00:00 To 31 Jul 2021 23:59 (GMT+01:00)",
    "title2":"Bonus 400% and 500%",
    "description":"<u><strong>Glo Nigeria Promotions!</strong></u><br /><strong>400% and 500% bonus for International top Ups today!&nbsp;</strong><br /><br /><strong>How it works</strong><br />If a customer wants to get 4X bonus, the customer will recharge N125 (N100 +25) to get N500, or recharge N1025 (N1000 + 25) to get N4100<br />&nbsp;<br />If a customer wants to get 5X bonus, the customer will recharge N120 (N100 +20) to get N600, or recharge N2020 (N2000 + 20) to get N10,100<br />&nbsp;<br />The addition of N25 or N20 to the original amount (N100 or N500 or N2000) is what triggers the application of the bonus to the recipient.<br /><br /><strong>Terms and Conditions</strong><br />* Bonus is valid for 14 and 30 days on specific denominations (See table below)<br />*&nbsp;Bonus Airtime can only be used to make local calls to all network, but not subscribe for data bundles.<br />* To check your 4X Bonus account dial #122*30#<br />&nbsp;* To check your 5X Bonus account dial #555*5#<br /><br /><img alt=\"\" src=\"https://i.postimg.cc/5NF3gKps/Glo-Voice-Bonus-Products.png\" style=\"height:423px; width:752px\" />",
    "startDate":"2021-06-06 03:00:00",
    "endDate":"2021-08-01 02:59:00",
    "denominations":null,
    "localDenominations":null
    }
    ]
    "Full authentication is required to access this resource"
    ,
    "path":"/promotions/operators/344",
    "errorCode":"INVALID_TOKEN",
    "infoLink":null,
    "details":[
    ]
    }

    Indicates the ID of the operator offering the promotion

    title1

    string

    Indicates the duration of the promotion and the name of the operator offering it

    title2

    string

    Indicates additional information on the promotion

    description

    string

    Indicates a summary of what the promotion is about

    startDate

    string

    The date the promotion begins

    endDate

    string

    The date the promotion ends

    denominations

    string

    Indicates the top-up amounts that are eligible for the promotion

    localDenominations

    string

    Indicates the local top-up amounts in the destination's currency that are eligible for the promotion

    "transactionId"
    :
    27623,
    "status": "SUCCESSFUL",
    "operatorTransactionId": null,
    "customIdentifier": null,
    "recipientPhone": "2348147658720",
    "recipientEmail": null,
    "senderPhone": "2341231231231",
    "countryCode": "NG",
    "operatorId": 341,
    "operatorName": "MTN Nigeria",
    "discount": 0,
    "discountCurrencyCode": "NGN",
    "requestedAmount": 100,
    "requestedAmountCurrencyCode": "NGN",
    "deliveredAmount": 100,
    "deliveredAmountCurrencyCode": "NGN",
    "transactionDate": "2022-02-21 04:19:26",
    "pinDetail": null,
    "balanceInfo": {
    "oldBalance": 969849.49,
    "newBalance": 969749.49,
    "cost": 100,
    "currencyCode": "NGN",
    "currencyName": "Nigerian Naira",
    "updatedAt": "2022-02-21 09:19:26"
    }
    },
    {...},
    {...}
    ]
    }

    countryCode

    string

    Indicates the ISO code of the country where the operator is registered

    customIdentifier

    string

    The unique reference assigned to the transaction

    startDate

    string

    Indicates the beginning of the timeframe range for the transactions to be searched for. Format is YYYY-MM-DD HH:mm:ss

    endDate

    string

    Indicates the end of the timeframe range for the transactions to be searched for Format is YYYY-MM-DD HH:mm:ss

    operatorId

    string

    Indicates the ID of the operator whose transaction history is being searched for

    operatorName

    string

    Indicates the name of the operator whose transaction history is being searched for

    Indicates the status of a transaction.

    operator

    TransactionId

    string

    Indicates the transaction ID assigned by the operator of the receiving mobile number

    customIdentifier

    string

    This is the top-up's reference that is to be assigned by the sender

    senderPhone

    string

    This indicates the sender's mobile number

    countryCode

    string

    Indicates the ISO code of the country where the operator is registered

    operatorId

    integer

    The ID of the receiving mobile number's operator

    operatorName

    string

    The name of the receiving mobile number's operator

    requestedAmount

    integer

    Indicates the top-up amount sent by the originating account

    discount

    integer

    Indicates if there was a discount on the top-up made and at what rate

    discountCurrency

    Code

    string

    Indicates the currency code of the receiving mobile number

    requestedAmount

    CurrencyCode

    string

    Indicates the currency code of the originating account

    deliveredAmount

    integer

    Indicates the top-up amount received by the receiving mobile number

    deliveredAmount

    CurrencyCode

    string

    Indicates the currency in which the top-up was delivered

    transactionDate

    string

    Indicates the date and time the top-up was made

    pinDetail

    object

    This contains information on how to process the PIN on the physical SIM. Note that this is only for operators that support PIN Top-up.

    balanceInfo

    object

    Contains information of the top-up sender's account balance.

    oldBalance

    integer

    Indicates the balance of the sender's account before the top-up was made

    newBalance

    integer

    Indicates the balance of the sender's account after the top-up was made

    cost

    integer

    Indicates the amount deducted from your account for the top-up.

    currencyCode

    string

    Indicates the currency code of the sender's account

    currencyName

    string

    Indicates the currency denomination of the sender's account

    updatedAt

    string

    Indicates the time the account's balance was updated to reflect the last top-up made

    "
    operatorId
    "
    :121,
    "title":"Digicel El Salvador From 07 Feb 2020 00:00 To 31 Dec 2020 23:59 (GMT-06:00)",
    "title2":"Bonus 5x",
    "description":"Imparable $7.00: 4 GB (from April 11th) + WhatsApp",
    "startDate":"Fri, 05 Apr 2019 06:00:00 +0000",
    "endDate":"Fri, 01 May 2020 05:59:00 +0000",
    "denominations":"USD 7, 10, 15 and 20",
    "localDenominations":null
    },
    {
    "promotionId":5462,
    "operatorId":128,
    "title":"Tigo El Salvador From 05 Apr 2019 00:00 To 30 Apr 2020 23:59",
    "title2":"Paquetigos Imparables",
    "description":"Imparable $7.00: 4 GB (from April 11th) + WhatsApp",
    "startDate":"Fri, 05 Apr 2019 06:00:00 +0000",
    "endDate":"Fri, 01 May 2020 05:59:00 +0000",
    "denominations":"USD 7, 10, 15 and 20",
    "localDenominations":null
    }
    ]

    Indicates the ID of the operator offering the promotion

    title1

    string

    Indicates the duration of the promotion and the name of the operator offering it

    title2

    string

    Indicates additional information on the promotion

    description

    string

    This indicates a summary of what the promotion is about

    startDate

    string

    The date the promotion begins

    endDate

    string

    The date the promotion ends

    denominations

    string

    Indicates the top-up amounts that are eligible for the promotion

    localDenominations

    string

    Indicates the local top-up amounts in the destination's currency that are eligible for the promotion

    OPERATOR_UNAVAILABLE_OR_

    CURRENTLY INACTIVE

    The specified operator is currently disabled or inactive on the platform.

    COULD_NOT_AUTO_DETECT_OPERATOR

    The mobile number's operator could not be auto-detected. This can be resolved by using the number lookup servicearrow-up-right

    INVALID_AMOUNT_FOR_OPERATOR

    The specified top-up amount is not valid for the given operator in the request.

    TOKEN_EXPIRED

    Access tokens have a finite lifetime which is indicated whenever they are issued.

    To track an access token's lifetime, you can either:

    • Keep track of the expires_in value in the response gotten when a request is made for an access token. The value is expressed in seconds.

    • Handle the HTTP 401 Unauthorized status code and the TOKEN_EXPIRED error code in the error response message. The API endpoint issues this status code when it detects an expired token.

    INSUFFICIENT_BALANCE

    The user's account balance is not sufficient enough to carry out their intended request.

    MAX_DAILY_TRANSACTION_AMOUNT_

    REACHED

    The user's account has hit its maximum allowed transaction amount limit for the day. This can be increased by contacting supportarrow-up-right.

    MAX_DAILY_TRANSACTION_COUNT_

    REACHED

    The user's account has hit its maximum allowed transaction count limit for the day. This can be increased by contacting supportarrow-up-right.

    ACCOUNT_NOT_FOUND

    The user's account does not exist. This can be resolved by contacting supportarrow-up-right.

    INVALID_AMOUNT

    The amount requested by the user is incorrect — either a wrong data type or an invalid amount specification (for operators with fixed ranges).

    INVALID_RECIPIENT_PHONE

    The specified recipientPhone parameter in the request is not valid for the specified country.

    INVALID_SENDER_PHONE

    The specified senderPhone parameter in the request is not valid for the specified country.

    INVALID_PHONE_NUMBER

    The specified phone number is not valid.

    PHONE_RECENTLY_RECHARGED

    A second recharge was attempted on a mobile number before the default waiting time of two minutes could elapse.

    INACTIVE_ACCOUNT

    The user's account has been deactivated due to suspicious activity. If you receive this message, do reach out to our supportarrow-up-right team.

    TOPUP_TRANSACTION_FAILED

    The attempt to carry out a function via the API is unsuccessful. If you receive this error, contact supportarrow-up-right for more details.

    TRANSACTION_CANNOT_BE_PROCESSED_AT_THE_MOMENT

    The attempt to carry out a function via the API is unsuccessful. If you receive this error, contact supportarrow-up-right for more details.

    OPERATOR_NOT_IN_SERVICE

    The specified operator in the request is currently disabled, inactive, or not in service on the platform.

    "Full authentication is required to access this resource"
    ,
    "path":"/topups-async",
    "errorCode":"INVALID_TOKEN",
    "infoLink":null,
    "details":[
    ]
    }
    :404,
    "error":"Not Found",
    "message":"No message available",
    "path":"/topups-asyn"
    }

    useLocalAmount

    boolean

    Indicates if the recharge is to be made in the operator's local currency. Default is false. This option is only available for operators that support local top-ups

    customIdentifier

    string

    Indicates the transaction reference of the recharge Note: Each transaction reference is to be unique. Once a reference has been used for a top-up transaction, it cannot be reused.

    recipientEmail

    string

    This is the recipient's email address. It is required when the operator is Nauta Cuba It supports only two email domains: 1. @nauta.com.cu 2. @nauta.co.cu

    receiverPhone*

    object

    Indicates an object containing the receiver's country code and mobile number

    senderPhone*

    object

    Indicates an object containing the sender's country code and mobile number

    countryCode*

    string

    Indicates the ISO code of the receiver's or sender's country. For top-up senders, this parameter is optional

    number*

    string

    Indicates the mobile number of the top-up receiver or sender. For top-up senders, this parameter is optional

    "
    SUCCESSFUL
    "
    ,
    "operatorTransactionId": null,
    "customIdentifier": "This is example identifier",
    "recipientPhone": "447951631337",
    "recipientEmail": null,
    "senderPhone": "11231231231",
    "countryCode": "GB",
    "operatorId": 535,
    "operatorName": "EE PIN England",
    "discount": 63.37,
    "discountCurrencyCode": "NGN",
    "requestedAmount": 3168.4,
    "requestedAmountCurrencyCode": "NGN",
    "deliveredAmount": 5,
    "deliveredAmountCurrencyCode": "GBP",
    "transactionDate": "2022-01-26 03:19:16",
    "pinDetail": {
    "serial": "558111",
    "info1": "DIAL *611",
    "info2": "DIAL *611",
    "info3": "Dial *233* and PIN #",
    "value": null,
    "code": "773709733097662",
    "ivr": "1-888-888-8888",
    "validity": "30 days"
    },
    "balanceInfo": {
    "oldBalance": 60387.41,
    "newBalance": 57282.38,
    "cost": 3105.03,
    "currencyCode": "NGN",
    "currencyName": "Nigerian Naira",
    "updatedAt": "2022-01-26 08:19:16"
    }
    }

    useLocalAmount

    boolean

    Indicates if the recharge is to be made in the operator's local currency. Default is false.

    customIdentifier

    string

    Indicates the transaction reference of the recharge. Note: Each transaction reference is to be unique. Once a reference has been used for a top-up transaction, it cannot be reused.

    recipientEmail

    string

    This is the recipient's email address. It is required when the operator is Nauta Cuba. It supports only two email domains: 1. @nauta.com.cu 2. @nauta.co.cu

    recipientPhone*

    object

    Indicates an object containing the receiver's country code and mobile number

    senderPhone

    object

    Indicates an object containing the sender's country code and mobile number

    countryCode*

    string

    Indicates the ISO code of the receiver's or sender's country

    number*

    string

    Indicates the mobile number of the top-up receiver or sender

    Indicates the status of a top-up. Note: SUCCESSFUL: This applies when the top up is successfully made. PROCESSING: This applies while the top up is still being verified from the operator's end. REFUNDED: This applies once the top up is not processed successfully from the airtime operator's end. In this instance, any funds debited from a user's wallet while attempting to make the top-up are automatically refunded.

    operator

    TransactionId

    string

    Indicates the transaction ID assigned by the operator of the receiving mobile number

    customIdentifier

    string

    This is the top-up's reference that is to be assigned by the sender

    recipientPhone

    string

    This indicates the top-up receiver's mobile number

    recipientEmail

    string

    This indicates the top-up receiver's email (only applicable to Nauta Cuba top-ups)

    senderPhone

    string

    This indicates the sender's mobile number

    countryCode

    string

    Indicates the ISO code of the country where the operator is registered

    operatorId

    integer

    The ID of the receiving mobile number's operator

    operatorName

    string

    The name of the receiving mobile number's operator

    discount

    integer

    Indicates if there was a discount on the top-up made and at what rate

    discountCurrency

    Code

    string

    Indicates the currency code of the receiving mobile number

    requestedAmount

    integer

    Indicates the top-up amount sent by the originating account

    requestedAmount

    CurrencyCode

    string

    Indicates the currency code of the originating account

    deliveredAmount

    integer

    Indicates the top-up amount received by the receiving mobile number

    deliveredAmount

    CurrencyCode

    string

    Indicates the currency in which the top-up was delivered

    transactionDate

    string

    Indicates the date and time the top-up was made

    pinDetail

    object

    This contains information on how to process the PIN on the physical SIM. Note that this is only for operators that support PIN Top-up

    serial

    string

    Indicates the serial code of the PIN top-up

    info

    string

    Indicates information on how to utilize the top-up

    value

    string

    Indicates additional information on the PIN

    code

    string

    Indicates the code that is to be used to activate the top-up

    ivr

    string

    Indicates the number to call for an interactive voice response

    validity

    string

    Indicates the validity of the PIN

    balanceInfo

    object

    Contains information of the top-up sender's account balance

    oldBalance

    integer

    Indicates the balance of the sender's account before the top-up was made

    newBalance

    integer

    Indicates the balance of the sender's account after the top-up was made

    cost

    integer

    Indicates the amount deducted from your account for the top-up.

    currencyCode

    string

    Indicates the currency code of the sender's account

    currencyName

    string

    Indicates the currency denomination of the sender's account

    updatedAt

    string

    Indicates the time the account's balance was updated to reflect the last top-up made

    operator

    TransactionId

    string

    Indicates the transaction ID assigned by the operator of the receiving mobile number

    customIdentifier

    string

    This is the top-up's reference that is to be assigned by the sender

    senderPhone

    string

    This indicates the sender's mobile number

    countryCode

    string

    Indicates the ISO code of the country where the operator is registered

    operatorId

    integer

    The ID of the receiving mobile number's operator

    operatorName

    string

    The name of the receiving mobile number's operator

    requestedAmount

    integer

    Indicates the top-up amount sent by the originating account

    discount

    integer

    Indicates if there was a discount on the top-up made and at what rate

    discountCurrency

    Code

    string

    Indicates the currency code of the receiving mobile number

    requestedAmount

    CurrencyCode

    string

    Indicates the currency code of the originating account

    deliveredAmount

    integer

    Indicates the top-up amount received by the receiving mobile number

    deliveredAmount

    CurrencyCode

    string

    Indicates the currency in which the top-up was delivered

    transactionDate

    string

    Indicates the date and time the top-up was made

    pinDetail

    object

    This contains information on how to process the PIN on the physical SIM. Note that this is only for operators that support PIN Top-up.

    balanceInfo

    object

    Balance information before and after the top-up

    transactionId*

    integer

    The ID of the transaction to be retrieved

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    Parameter

    Type

    Description

    transactionId

    integer

    Indicates the unique ID of a top-up

    status

    string

    {
      "transactionId": 27623,
      "status": "SUCCESSFUL",
      "operatorTransactionId": null,
      "customIdentifier": null,
      "recipientPhone": "2348147658720",
      "recipientEmail": null,
      "senderPhone": "2341231231231",
      "countryCode": "NG",
      "operatorId": 341,
      "operatorName": "MTN Nigeria",
      "discount": 0,
      "discountCurrencyCode": "NGN",
      "requestedAmount": 100,
      "requestedAmountCurrencyCode": "NGN",
      "deliveredAmount": 100,
      "deliveredAmountCurrencyCode": "NGN",
      "transactionDate": "2022-02-21 04:19:26",
      "pinDetail": null,
      "balanceInfo": {
        "oldBalance": 969849.49,
        "newBalance": 969749.49,
        "cost": 100,
        "currencyCode": "NGN",
        "currencyName": "Nigerian Naira",
        "updatedAt": "2022-02-21 09:19:26"
      }
    }

    Indicates the status of a transaction.

    {
      "timeStamp":"2021-06-09 20:59:35",
      "message":"Full authentication is required to access this resource",
      "path":"/topups/reports/transactions/270395",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    {
      "timeStamp":"2021-06-09 20:51:40",
      "message":"Airtime transaction not found",
      "path":"/topups/reports/transactions/270395111",
      "errorCode":null,
      "infoLink":null,
      "details":[
        
      ]
    }
    curl --location --request GET 'https://topups.reloadly.com/topups/reports/transactions/1' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' 
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Post, "https://topups.reloadly.com/topups/reports/transactions/1");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/topups/reports/transactions/1"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/topups/reports/transactions/1")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/topups/reports/transactions/1',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json'
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/topups/reports/transactions/1',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/topups/reports/transactions/1"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)

    operator

    TransactionId

    string

    Indicates the transaction ID assigned by the operator of the receiving mobile number

    customIdentifier

    string

    This is the top-up's reference that is to be assigned by the sender

    recipientPhone

    string

    This indicates the top-up receiver's mobile number

    recipientEmail

    string

    This indicates the top-up receiver's email (only applicable to Nauta Cuba top-ups)

    senderPhone

    string

    This indicates the sender's mobile number

    countryCode

    string

    Indicates the ISO code of the country where the operator is registered.

    operatorId

    integer

    The ID of the receiving mobile number's operator

    operatorName

    string

    The name of the receiving mobile number's operator

    discount

    integer

    Indicates if there was a discount on the top-up made and at what rate

    discountCurrency

    Code

    string

    Indicates the currency code of the receiving mobile number

    requestedAmount

    integer

    Indicates the top-up amount sent by the originating account

    requestedAmount

    CurrencyCode

    string

    Indicates the currency code of the originating account

    deliveredAmount

    integer

    Indicates the top-up amount received by the receiving mobile number

    deliveredAmount

    CurrencyCode

    string

    Indicates the currency in which the top-up was delivered

    transactionDate

    string

    Indicates the date and time the top-up was made

    pinDetail

    object

    This contains information on how to process the PIN on the physical SIM. Note that this is only for operators that support PIN Top-up

    serial

    string

    Indicates the serial code of the PIN top-up

    info

    string

    Indicates information on how to utilize the top-up

    value

    string

    Indicates additional information on the PIN

    code

    string

    Indicates the code that is to be used to activate the top-up

    ivr

    string

    Indicates the number to call for an interactive voice response

    validity

    string

    Indicates the validity of the PIN

    balanceInfo

    object

    Contains information of the top-up sender's account balance

    oldBalance

    integer

    Indicates the balance of the sender's account before the top-up was made

    newBalance

    integer

    Indicates the balance of the sender's account after the top-up was made

    cost

    integer

    Indicates the amount deducted from your account for the top-up.

    currencyCode

    string

    Indicates the currency code of the sender's account

    currencyName

    string

    Indcates the currency denomination of the sender's account

    updatedAt

    string

    Indicates the time the account's balance was updated to reflect the last top-up made

    transactionId*

    integer

    Indicates the transaction ID retrieved from an asynchronous top-up request

    Authorization*

    string

    Your access token is required as a bearer token in the request's header

    Parameter

    Type

    Description

    transactionId

    integer

    Indicates the unique ID of a top-up

    status

    string

    {
        "transactionId": 26523,
        "status": "SUCCESSFUL",
        "operatorTransactionId": null,
        "customIdentifier": "This is example identifier",
        "recipientPhone": "447951631337",
        "recipientEmail": null,
        "senderPhone": "11231231231",
        "countryCode": "GB",
        "operatorId": 535,
        "operatorName": "EE PIN England",
        "discount": 63.37,
        "discountCurrencyCode": "NGN",
        "requestedAmount": 3168.4,
        "requestedAmountCurrencyCode": "NGN",
        "deliveredAmount": 5,
        "deliveredAmountCurrencyCode": "GBP",
        "transactionDate": "2022-01-26 03:19:16",
        "pinDetail": {
            "serial": "558111",
            "info1": "DIAL *611",
            "info2": "DIAL *611",
            "info3": "Dial *233* and PIN #",
            "value": null,
            "code": "773709733097662",
            "ivr": "1-888-888-8888",
            "validity": "30 days"
        },
        "balanceInfo": {
            "oldBalance": 60387.41,
            "newBalance": 57282.38,
            "cost": 3105.03,
            "currencyCode": "NGN",
            "currencyName": "Nigerian Naira",
            "updatedAt": "2022-01-26 08:19:16"
        }
    }

    Indicates the status of a top-up.

    Note:

    SUCCESSFUL: This applies when the top up is successfully made.

    PROCESSING: This applies while the top up is still being verified from the operator's end.

    REFUNDED: This applies once the top up is not processed successfully from the airtime operator's end. In this instance, any funds debited from a user's wallet while attempting to make the top-up are automatically refunded. FAILED:

    {
      "timeStamp":"2021-06-08 16:03:24",
      "message":"Transaction not found for given id",
      "path":"/topups/238746/status",
      "errorCode":"TRANSACTION_NOT_FOUND",
      "in4foLink":null,
      "details":[
        
      ]
    }
    {
      "code":null,
      "message":null,
      "status":"PROCESSING",
      "transaction":null
    }
    {
      "code": "SERVICE_TO_OPERATOR_TEMPORARILY_UNAVAILABLE",
      "message": "The transaction failed due to an outage and / or connection issue with the operator",
      "status": "REFUNDED",
      "transaction": null
    }
    {
       "code":"PROVIDER_INTERNAL_ERROR",
       "message":"Please wait 30 minutes to purchase same product",
       "status":"FAILED",
       "transaction":null
    }
    {
      "timeStamp":"2021-06-08 12:00:54",
      "message":"Full authentication is required to access this resource",
      "path":"/topups/2/status",
      "errorCode":"INVALID_TOKEN",
      "infoLink":null,
      "details":[
        
      ]
    }
    curl --location -g --request GET 'https://topups.reloadly.com/topups/{{transactionId}}/status' \
    --header 'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE' \
    --header 'Accept: application/com.reloadly.topups-v1+json' 
    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    using Newtonsoft.Json;
    
    namespace WebAPIClient {
      class Program {
    
        static async Task Main(string[] args) {
          await ApiCall();
        }
    
        private static async Task ApiCall() {
    
          var message = new HttpRequestMessage(HttpMethod.Get, "https://topups.reloadly.com/topups/{{transactionId}}/status");
    
          message.Headers.TryAddWithoutValidation("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE");
          message.Headers.TryAddWithoutValidation("Accept", "application/com.reloadly.topups-v1+json");
    
          using
          var httpClient = new HttpClient();
          var response = await httpClient.SendAsync(message);
          var responseBody = await response.Content.ReadAsStringAsync();
          var result = JsonConvert.DeserializeObject < dynamic > (responseBody);
    
          Console.WriteLine(result);
        }
    
      }
    }
    package main
    
    import (
      "fmt"
      "net/http"
      "io/ioutil"
    )
    
    func main() {
    
      url := "https://topups.reloadly.com/topups/{{transactionId}}/status"
      method := "GET"
    
      client := &http.Client {
      }
      req, err := http.NewRequest(method, url, nil)
    
      if err != nil {
        fmt.Println(err)
        return
      }
      req.Header.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      req.Header.Add("Accept", "application/com.reloadly.topups-v1+json")
    
      res, err := client.Do(req)
      if err != nil {
        fmt.Println(err)
        return
      }
      defer res.Body.Close()
    
      body, err := ioutil.ReadAll(res.Body)
      if err != nil {
        fmt.Println(err)
        return
      }
      fmt.Println(string(body))
    }
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    Request request = new Request.Builder()
      .url("https://topups.reloadly.com/topups/{{transactionId}}/status")
      .method("GET", null)
      .addHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN_HERE")
      .addHeader("Accept", "application/com.reloadly.topups-v1+json")
      .build();
    Response response = client.newCall(request).execute();
    var request = require('request');
    var options = {
      'method': 'GET',
      'url': 'https://topups.reloadly.com/topups/{{transactionId}}/status',
      'headers': {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept': 'application/com.reloadly.topups-v1+json'
      }
    };
    request(options, function (error, response) {
      if (error) throw new Error(error);
      console.log(response.body);
    });
    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://topups.reloadly.com/topups/%7B%7BtransactionId%7D%7D/status',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer YOUR_ACCESS_TOKEN_HERE',
        'Accept: application/com.reloadly.topups-v1+json'
      ),
    ));
    
    $response = curl_exec($curl);
    
    curl_close($curl);
    echo $response;
    import requests
    import json
    
    url = "https://topups.reloadly.com/topups/{{transactionId}}/status"
    
    payload={}
    headers = {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN_HERE',
      'Accept': 'application/com.reloadly.topups-v1+json'
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.text)
    This applies when the top-up attempt fails due to an internal error from the operator's end. In this instance, you should wait 30 minutes before reinitiating the top-up. Funds are not debited for a failed top-up attempt.