curl --request GET \
--url https://api.myladder.africa/partner/v1/market/instruments \
--header 'X-Ladder-Key: <api-key>' \
--header 'X-Ladder-Signature: <api-key>' \
--header 'X-Ladder-Timestamp: <api-key>'import requests
url = "https://api.myladder.africa/partner/v1/market/instruments"
headers = {
"X-Ladder-Key": "<api-key>",
"X-Ladder-Timestamp": "<api-key>",
"X-Ladder-Signature": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Ladder-Key': '<api-key>',
'X-Ladder-Timestamp': '<api-key>',
'X-Ladder-Signature': '<api-key>'
}
};
fetch('https://api.myladder.africa/partner/v1/market/instruments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.myladder.africa/partner/v1/market/instruments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Ladder-Key: <api-key>",
"X-Ladder-Signature: <api-key>",
"X-Ladder-Timestamp: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.myladder.africa/partner/v1/market/instruments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Ladder-Key", "<api-key>")
req.Header.Add("X-Ladder-Timestamp", "<api-key>")
req.Header.Add("X-Ladder-Signature", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.myladder.africa/partner/v1/market/instruments")
.header("X-Ladder-Key", "<api-key>")
.header("X-Ladder-Timestamp", "<api-key>")
.header("X-Ladder-Signature", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.myladder.africa/partner/v1/market/instruments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Ladder-Key"] = '<api-key>'
request["X-Ladder-Timestamp"] = '<api-key>'
request["X-Ladder-Signature"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"symbol": "<string>",
"name": "<string>",
"currency": "<string>",
"identifiers": {
"provider": "<string>",
"provider_ref": "<string>",
"isin": "<string>"
},
"listing": {
"status": "<string>",
"first_seen_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z"
},
"media": {
"logo_url": "<string>",
"website": "<string>"
},
"ladder": {
"investment_id": "<string>",
"orderable": "<string>"
},
"asset_class": "<string>",
"security_type": "<string>",
"exchange": "<string>",
"equity": "<string>",
"fund": "<string>",
"index": "<string>",
"quote": "<string>"
}
],
"pagination": {
"limit": 123,
"offset": 123,
"count": 123
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}List market instruments
Reference data for every NGX equity and ETF Ladder tracks (indices on request), each with its latest quote and the ladder block that says whether it can be ordered through POST /orders. Reference fields change rarely; quotes refresh about every 15 minutes during the NGX session, so poll GET /market/quotes for prices.
curl --request GET \
--url https://api.myladder.africa/partner/v1/market/instruments \
--header 'X-Ladder-Key: <api-key>' \
--header 'X-Ladder-Signature: <api-key>' \
--header 'X-Ladder-Timestamp: <api-key>'import requests
url = "https://api.myladder.africa/partner/v1/market/instruments"
headers = {
"X-Ladder-Key": "<api-key>",
"X-Ladder-Timestamp": "<api-key>",
"X-Ladder-Signature": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Ladder-Key': '<api-key>',
'X-Ladder-Timestamp': '<api-key>',
'X-Ladder-Signature': '<api-key>'
}
};
fetch('https://api.myladder.africa/partner/v1/market/instruments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.myladder.africa/partner/v1/market/instruments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Ladder-Key: <api-key>",
"X-Ladder-Signature: <api-key>",
"X-Ladder-Timestamp: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.myladder.africa/partner/v1/market/instruments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Ladder-Key", "<api-key>")
req.Header.Add("X-Ladder-Timestamp", "<api-key>")
req.Header.Add("X-Ladder-Signature", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.myladder.africa/partner/v1/market/instruments")
.header("X-Ladder-Key", "<api-key>")
.header("X-Ladder-Timestamp", "<api-key>")
.header("X-Ladder-Signature", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.myladder.africa/partner/v1/market/instruments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Ladder-Key"] = '<api-key>'
request["X-Ladder-Timestamp"] = '<api-key>'
request["X-Ladder-Signature"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"symbol": "<string>",
"name": "<string>",
"currency": "<string>",
"identifiers": {
"provider": "<string>",
"provider_ref": "<string>",
"isin": "<string>"
},
"listing": {
"status": "<string>",
"first_seen_at": "2023-11-07T05:31:56Z",
"last_seen_at": "2023-11-07T05:31:56Z"
},
"media": {
"logo_url": "<string>",
"website": "<string>"
},
"ladder": {
"investment_id": "<string>",
"orderable": "<string>"
},
"asset_class": "<string>",
"security_type": "<string>",
"exchange": "<string>",
"equity": "<string>",
"fund": "<string>",
"index": "<string>",
"quote": "<string>"
}
],
"pagination": {
"limit": 123,
"offset": 123,
"count": 123
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
}
}Authorizations
Your key id: pk_test_… (sandbox) or pk_live_… (live).
Unix seconds, as a string; must be within 5 minutes of server time.
Lower-case hex HMAC-SHA512 over timestamp, method, path+query and the SHA-256 of the body. See Authentication.
Query Parameters
Page size, 1–200 (default 50).
Rows to skip (default 0).
common_stock (equity), etf (fund) or index
true to include indices in the default listing (they are excluded unless type=index)
Exact sector as listed by the exchange, e.g. FINANCIAL SERVICES
Exact board, e.g. Premium Board
Case-insensitive match on symbol or name
Comma-separated symbols
active (default) or inactive; all for both
true: only instruments with a Ladder investment open to partners