API Explorer
The International Development Association (IDA) credits are public and publicly guaranteed debt extended by the World Bank Group. IDA provides development credits, grants and guarantees to its recipient member countries to help meet their development needs. Credits from IDA are at concessional rates. Data are in U.S. dollars calculated using historical rates. This dataset contains the latest available snapshot of the IDA Statement of Credits and Grants. The World Bank complies with all sanctions applicable to World Bank transactions.
Parameters
Parameter | Value | Description | API FIELD NAME | Data Type |
---|---|---|---|---|
End of Period | End of Period Date represents the date as of which balances are shown in the report. | end_of_period | DATE | |
Credit Number | For IDA, credits, grants or guarantee number consists of the organization prefix (IDA) and a five-character label that uniquely identifies the ID within the organization. IDs starting with IDAB and IDAG are "Guarantees", IDs starting with IDAD, IDAH and IDAE are "Grants" and the rest are "Credits". | credit_number | STRING | |
Region | Country / Economy lending is grouped into regions based on the current World Bank administrative (rather than geographic) region where project implementation takes place. The Other Region is used for loans to the IFC. | region | STRING | |
Country / Economy Code | Country / Economy Code according to the World Bank country / economy list. Might be different from the ISO country / economy code. | country_code | STRING | |
Country / Economy | Country / Economy to which loan has been issued. Loans to the IFC are included under the country / economy “World”. | country | STRING | |
Borrower | The representative of the borrower to which the Bank loan is made. | borrower | STRING | |
Credit Status | Status of the loan. | credit_status | STRING | |
Service Charge Rate | Current Interest rate or service charge applied to loan. For loans that could have more than one interest rate (e.g. FSL or SCL fixed rate loans), the interest rate is shown as “0”. | service_charge_rate | NUMBER | |
Currency of Commitment | The currency in which a borrower’s loan, credit, grant or trust fund is denominated. | currency_of_commitment | STRING | |
Project ID | A Bank project is referenced by a project ID (Pxxxxxxx). More than one loan, credit, or grant may be associated with one Project ID. | project_id | STRING | |
Project Name | Short descriptive project name. | project_name | STRING | |
Original Principal Amount (US$) | The original US dollar amount of the loan that is committed and approved. | original_principal_amount_us_ | NUMBER | |
Cancelled Amount (US$) | The portion of the undisbursed balance which has been cancelled (i.e. no longer available for future disbursement). Cancellations include terminations (where approved loan agreements were never signed). | cancelled_amount_us_ | NUMBER | |
Undisbursed Amount (US$) | The amount of a loan commitment that is still available to be drawn down. These currency amounts have been converted to US dollars at the exchange rates applicable at the end of period date. | undisbursed_amount_us_ | NUMBER | |
Disbursed Amount (US$) | The amount that has been disbursed from a loan commitment in equivalent US dollars calculated at the exchange rate on the value date of the individual disbursements. | disbursed_amount_us_ | NUMBER | |
Repaid to IDA (US$) | Total principal amounts paid or prepaid to IDA in US dollars, calculated at the exchange rate on the value date of the individual repayments.Repaid to IDA amounts include amounts written off under the Multilateral Debt Relief Initiative (MDRI). | repaid_to_ida_us_ | NUMBER | |
Due to IDA (US$) | The amount due and outstanding as of the End of Period date. | due_to_ida_us_ | NUMBER | |
Exchange Adjustment (US$) | The increase (decrease) in value of disbursed and outstanding amount due to exchange rate fluctuations; includes exchange adjustments on the amounts Due to 3rd parties. | exchange_adjustment_us_ | NUMBER | |
Borrowers Obligation (US$) | The Borrower Obligation is the outstanding balance for the loan as of the end of period date in US dollars equivalent. The Borrower's Obligation includes the amounts outstanding Due to 3rd parties. | borrowers_obligation_us_ | NUMBER | |
Sold 3rd Party (US$) | Portion of loan sold to a third party. | sold_3rd_party_us_ | NUMBER | |
Repaid 3rd Party (US$) | Amount repaid to a third party. | repaid_3rd_party_us_ | NUMBER | |
Due 3rd Party (US$) | Amount due to a third party. | due_3rd_party_us_ | NUMBER | |
Credits Held (US$) | The sum of the disbursed and outstanding amounts (net of repayments, i.e. Due to IBRD/IDA) plus undisbursed available amounts expressed in historical US Dollars. | credits_held_us_ | NUMBER | |
First Repayment Date | The date on which principal repayment starts. | first_repayment_date | DATE | |
Last Repayment Date | The date specified in the loan/credit agreement (amended for any partial prepayments) on which the last principal installment must be repaid by the Borrower. | last_repayment_date | DATE | |
Agreement Signing Date | The date the borrower and the Bank sign the loan agreement. | agreement_signing_date | DATE | |
Board Approval Date | The date the World Bank approves the loan. | board_approval_date | DATE | |
Effective Date (Most Recent) | The date on which a legal agreement becomes effective, or is expected to become effective. | effective_date_most_recent | DATE | |
Closed Date (Most Recent) | The date specified in the legal agreement (or extension) after which the Bank may, by notice to the borrower, terminate the right to make withdrawals from the loan account. | closed_date_most_recent | DATE | |
Last Disbursement Date | The date on which the last disbursement was made (prior to the end of period date). | last_disbursement_date | DATE | |
Dataset ID | ID of the associated Dataset | STRING | ||
Top | Number of records to fetch | NUMBER | ||
Skip | Skip the records from the ascending order | NUMBER |
https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&top=100&type=json
No Data Available
Additional Information
Time Series
Credit, Grant, Guarantee
World Bank Group
Month
Other
official
Monthly
IDA
end_of_period, board_approval_date
Query tool,API,Mobile App,Bulk download
English
By 10th business day of each month
Jan 31, 2025
Mar 04, 2025
Jan 16, 2025
Scope
JavaScript makes it super simple to fetch from an API endpoint.
fetch('https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&top=100&type=json')
.then(response => {
if (!response.ok) {
throw new Error('');
}
return response.json();
})
.then(data => {
// Do something with the response data
// console.log(data);
})
.catch(error => {
console.error('Error:', error);
});
async function fetchAllData(url) {
let allData = [];
let hasMoreData = true;
let top = 1000;
let skip = 0;
while (hasMoreData) {
const response = await fetch(`${url}&top=${top}&skip=${skip}`);
if (!response.ok) {
throw new Error('Network response was not ok');
}
const res = await response.json();
allData = allData.concat(res);
// Check if we received less data than requested, indicating no more data
if (res.data.length < top) {
hasMoreData = false;
} else {
skip += top;
}
}
return allData;
}
let url = 'https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&type=json';
fetchAllData(`${url}`).then(allData => {
// Do something with all the data
// console.log(allData);
})
.catch(error => {
console.error('Error:', error);
});
Python for easily work with data.
import requests
url = 'https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&top=100&type=json'
try:
response = requests.get(url)
response.raise_for_status() # Raise an exception for 4XX and 5XX status codes
data = response.json() # Parse the JSON response
print(data) # Print the response data
except requests.RequestException as e:
print(f'Error: {e}')
import requests
def fetch_all_data():
base_url = 'https://datacatalogapi.worldbank.org/dexapps/fone/api/view'
dataset_id = 'DS01175'
resource_id = 'RS00001'
top = 1000
skip = 0
all_data = []
total_count = 0
page = 1
while True:
url = f'url = f'{base_url}?datasetId={dataset_id}&resourceId={resource_id}&top={top}&type=json&skip={1000*(page-1)}'
try:
response = requests.get(url, timeout=10)
#print(response)
response.raise_for_status() # Raise an exception for 4XX and 5XX status codes
data = response.json() # Parse the JSON response
# Assuming the actual data is in the 'data' key of the response
if 'data' not in data or not data['data']: # Exit the loop if no more data is returned
break
if page == 1 and 'count' in data:
total_count = data['count'] # Store the total count from the first response
all_data.extend(data['data']) # Add the fetched data to the list
page += 1 # Increment the page value to get the next set of records
#print(f'Page: {page}, Status Code: {response.status_code}')
except requests.RequestException as e:
print(f'Error: {e}')
break
return {'count': total_count, 'data': all_data}
# Fetch all data and print it
all_data = fetch_all_data()
print(all_data)
PowerShell code to extract data.
$url = 'https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&top=100&type=json'
try {
$response = Invoke-RestMethod -Uri $url -Method Get
# Print the response
Write-Output $response
} catch {
# Print error message if request fails
Write-Error "Error: $_"
}
function Fetch-AllData {
param (
[string]$baseUrl
)
$allData = @()
$top = 1000
$skip = 0
$hasMoreData = $true
while ($hasMoreData) {
$url = "$baseUrl&top=$top&skip=$skip"
try {
$response = Invoke-RestMethod -Uri $url -Method Get
$allData += $response.data
# Check if we received less data than requested, indicating no more data
if ($response.data.Count -lt $top) {
$hasMoreData = $false
} else {
$skip += $top
}
} catch {
Write-Error "Error: $_"
$hasMoreData = $false
}
}
return $allData
}
$baseUrl = 'https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&type=json'
$allData = Fetch-AllData -baseUrl $baseUrl
# Do something with all the data
$allData | ConvertTo-Json | Write-Output
The following snippet brings data into your application.
require 'net/http'
url = URI('https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&top=100&type=json')
begin
response = Net::HTTP.get_response(url)
if response.is_a?(Net::HTTPSuccess)
puts response.body
else
puts "Error: #{response.code} - #{response.message}"
end
rescue StandardError => e
puts "Error: #{e.message}"
end
require 'net/http'
require 'json'
require 'uri'
def fetch_all_data(base_url)
all_data = []
has_more_data = true
top = 1000
skip = 0
while has_more_data
url = URI("#{base_url}&top=#{top}&skip=#{skip}")
response = Net::HTTP.get_response(url)
if response.is_a?(Net::HTTPSuccess)
begin
data = JSON.parse(response.body)
if data.key?('data')
all_data.concat(data['data'])
# Check if we received less data than requested, indicating no more data
if data['data'].length < top
has_more_data = false
else
skip += top
end
else
has_more_data = false
end
rescue JSON::ParserError => e
puts "JSON parsing error: #{e.message}"
has_more_data = false
end
else
puts "Error: #{response.code} - #{response.message}"
has_more_data = false
end
end
all_data
rescue StandardError => e
puts "Error: #{e.message}"
end
base_url = 'https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&type=json'
all_data = fetch_all_data(base_url)
puts all_data
Below code that makes usage with .NET more natural.
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var response = await new HttpClient().GetStringAsync("https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&top=100&type=json");
Console.WriteLine(response);
}
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class Program
{
static async Task Main(string[] args)
{
string baseUrl = "https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&type=json";
var allData = await FetchAllData(baseUrl);
// Do something with all the data
Console.WriteLine(allData);
}
static async Task<JArray> FetchAllData(string baseUrl)
{
var allData = new JArray();
int top = 1000;
int skip = 0;
bool hasMoreData = true;
using (HttpClient client = new HttpClient())
{
while (hasMoreData)
{
string url = $"{baseUrl}&top={top}&skip={skip}";
var response = await client.GetStringAsync(url);
var data = JArray.Parse(JObject.Parse(response)["data"].ToString());
allData.Merge(data);
// Check if we received less data than requested, indicating no more data
if (data.Count < top)
{
hasMoreData = false;
}
else
{
skip += top;
}
}
}
return allData;
}
}
JAVA for easily work with data.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class Main {
public static void main(String[] args) throws Exception {
URL url = new URL("https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&top=100&type=json");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
StringBuffer response = new StringBuffer();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
System.out.println(response.toString());
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONArray;
import org.json.JSONObject;
public class Main {
public static void main(String[] args) throws Exception {
String baseUrl = "https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&type=json";
int top = 1000;
int skip = 0;
boolean hasMoreData = true;
JSONArray allData = new JSONArray();
while (hasMoreData) {
String urlWithParams = baseUrl + "&top=" + top + "&skip=" + skip;
URL url = new URL(urlWithParams);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
StringBuffer response = new StringBuffer();
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
JSONObject jsonResponse = new JSONObject(response.toString());
JSONArray data = jsonResponse.getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
allData.put(data.getJSONObject(i));
}
// Check if we received less data than requested, indicating no more data
if (data.length() < top) {
hasMoreData = false;
} else {
skip += top;
}
}
// Do something with all the data
System.out.println(allData.toString());
}
}
The following snippet brings data into your application.
shell "curl -X GET https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&top=100&type=json"
#!/bin/bash
top=1000
skip=0
has_more_data=true
all_data="[]"
while $has_more_data; do
url="https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&type=json&top=$top&skip=$skip"
response=$(curl -s -X GET "$url")
# Extract data from the response
data=$(echo "$response" | jq '.data')
# Append the new data to all_data
all_data=$(echo "$all_data $data" | jq -s '[.[][]]')
# Check if we received less data than requested, indicating no more data
data_length=$(echo "$data" | jq 'length')
if [[ "$data_length" -lt "$top" ]]; then
has_more_data=false
else
skip=$((skip + top))
fi
done
# Output all the data
echo "$all_data" | jq
PHP code to brings the data.
<?php
// Specify the URL you want to send the GET request to
$url = "https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&top=100&type=json";
// Initialize cURL session
$curl = curl_init();
// Set the cURL options
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// Execute cURL session
$response = curl_exec($curl);
// Close cURL session
curl_close($curl);
// Print the response
echo $response;
?>
<?php
function fetchAllData($baseUrl) {
$allData = [];
$hasMoreData = true;
$top = 1000;
$skip = 0;
while ($hasMoreData) {
$url = "{$baseUrl}&top={$top}&skip={$skip}";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
if (curl_errno($curl)) {
echo 'Curl error: ' . curl_error($curl);
curl_close($curl);
break;
}
curl_close($curl);
$data = json_decode($response, true);
if (isset($data['data'])) {
$allData = array_merge($allData, $data['data']);
// Check if we received less data than requested, indicating no more data
if (count($data['data']) < $top) {
$hasMoreData = false;
} else {
$skip += $top;
}
} else {
$hasMoreData = false;
}
}
return $allData;
}
$baseUrl = 'https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&type=json';
$allData = fetchAllData($baseUrl);
print_r($allData);
Copy and paste the following to import this dataset into Stata.
clear
. import delimited "https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&top=100&type=json"
clear
local base_url "https://datacatalogapi.worldbank.org/dexapps/fone/api/view?viewId=DS01175&type=json"
local top 1000
local skip 0
local has_more_data 1
tempfile all_data
save `all_data', emptyok
while `has_more_data' {
local url "`base_url'&top=`top'&skip=`skip'"
import delimited "`url'", clear
// Check if we received less data than requested, indicating no more data
local n = _N
if `n' < `top' {
local has_more_data 0
} else {
local skip = `skip' + `top'
}
append using `all_data'
save `all_data', replace
}
use `all_data'