API Explorer
Trust Funds and FIFs
Afghanistan Reconstruction Trust Fund (ARTF) - Donor Contributions - BETA
Data as of Apr 20, 2014
Temporary Coverage: Fiscal year 2002 - 2015
Afghanistan Reconstruction Trust Fund (ARTF) - Donor Contributions: This data represents Donor contributions (pledges and paid-in amounts) towards the Afghanistan Reconstruction Trust Fund (ARTF).
Parameters
Parameter | Value | Description | API FIELD NAME | Data Type |
---|---|---|---|---|
Amendment unique ID | Unique Identifier for the contribution. Contributions are sometimes paid in installments. When payments share the Ammendment ID, these are installments of the same contribution committed. | ammendment_unique_id | STRING | |
As Of Date | Date when the data snapshot was taken. | as_of_date | DATE | |
Contribution Commitment Amount | Contribution Commitment amount - The amount pledged by a donor in the grant agreement. This amount is recorded by the bank, and sometimes paid in separate installments. | contribution_commitment_amount | NUMBER | |
Donor Code | Country Code according to the World Bank country list. Might be different from the ISO country code. | donor_code | STRING | |
Donor Country | Name of donor country/entity. | donor_country | STRING | |
Donor ID | Donor identification number. | donor_id | STRING | |
Donor or Grant Agreement Currency | Currency of the contribution, as per the Grant Agreement. | donor_or_grant_agreement_currency | STRING | |
Foreign Exchange Receipt Date | Value date of Receipt Amount in Receipt Currency exchanged for USD . | foreign_exchange_receipt_date | DATE | |
Foreign Exchange Receipt Year CY | Calendar year within which the Foreign Exchange Date falls. | foreign_exchange_receipt_year_cy | STRING | |
Foreign Exchange Receipt Year FY | Fiscal year within which the Foreign Exchange Date falls. The fiscal year begins on July 1st of the previous year and runs through June 30th of the designated year. | foreign_exchange_receipt_year_fy | STRING | |
Foreign Exchange Receipt Year SY | Solar year within which the Foreign Exchange Date falls. | foreign_exchange_receipt_year_sy | STRING | |
Fund | Fund/Program type. | fund | STRING | |
Installment Due Date | Date installment is due for Contribution Amount. Date donor pledges to make contributions. | installment_due_date | DATE | |
Installment Due Year CY | Calendar year within which the Installment Due Date falls. | installment_due_year_cy | STRING | |
Installment Due Year FY | Fiscal year within which the Installment Due Date falls. The fiscal year begins on July 1st of the previous year and runs through June 30th of the designated year. | installment_due_year_fy | STRING | |
Installment Due Year SY | Solar year within which the Installment Due Date falls. | installment_due_year_sy | STRING | |
Installment Posting Date | Date the Trust Funds team posts actual receivables into TF account for a portion of a Contribution (installment). | installment_posting_date | DATE | |
Installment Posting year CY | Calendar year within which the Installment Posting Date falls. | installment_posting_year_cy | STRING | |
Installment Posting year FY | World Bank Fiscal year within which the Installment Posting Date. The fiscal year begins on July 1st of the previous year and runs through June 30th of the designated year. | installment_posting_year_fy | STRING | |
Installment Posting year SY | Calendar year within which the Installment Posting Date falls. | installment_posting_year_sy | STRING | |
No Preference Amount (in USD) | Amount of contribution with no Preference, in USD. | no_preference_amount_in_usd | NUMBER | |
Preference Amount (in USD) | Amount of Contribution with Preference, in USD . | preference_amount_in_usd | NUMBER | |
Project Preference | A Description of the project for which Donor expressed contribution preference. | project_preference | STRING | |
Project Preference Project ID | Project ID for which Donor expressed contribution preference. | project_preference_project_id | STRING | |
Project Preference Trust Fund Grant Number | Trust fund grant ID for which Donor expressed contribution preference. | project_preference_trust_fund_grant_number | STRING | |
Receipt Amount (In Donation Currency) | Contributions received from a Donor in the form of cash by the World Bank entity administering the Trust Fund. | receipt_amount_in_donation_currency | NUMBER | |
Total Receipt Amount (in USD) | Paid-in Receipt Amount Preference + No Preference (in USD). | total_receipt_amount_in_usd | NUMBER | |
Trustee Fund Name | Refers to the Trustee Fund name used in the World Bank system to identify a Trustee Account. | trustee_fund_name | STRING | |
Trustee Fund Number | Refers to Trustee Account. The Trustee Account is the account at the highest level in the Trust Fund hierarchy into which Contributions or other funds are received. Every Trust fund hierarchy has one Trustee Account. | trustee_fund_number_ | STRING | |
Resource ID | ID of the associated Resource | STRING | ||
Select | Fields that required E.g (fiscal_year|supplier_country|total_amount) | STRING | ||
Top | Number of records to fetch | NUMBER | ||
Skip | Skip the records from the ascending order | NUMBER |
https://datacatalogapi.worldbank.org/dexapps/fone/api/apiservice?datasetId=DS00990&resourceId=RS00920&top=100&type=json
No Data Available
Additional Information
Transactions
Donor ID
World Bank Group
Day
Regional
official
No further updates planned
South Asia
installment_posting_date, installment_due_date
Query tool,API,Bulk download
English
No further updates planned
Apr 20, 2014
Apr 17, 2025
Apr 17, 2025
What's in this Dataset?
598
29
JavaScript makes it super simple to fetch from an API endpoint.
fetch('https://datacatalogapi.worldbank.org/dexapps/fone/api/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice'
dataset_id = 'DS00990'
resource_id = 'RS00920'
top = 1000
skip = 0
all_data = []
total_count = 0
page = 1
while True:
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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&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/apiservice?datasetId=DS00990&resourceId=RS00920&top=100&type=json"
clear
local base_url "https://datacatalogapi.worldbank.org/dexapps/fone/api/apiservice?datasetId=DS00990&resourceId=RS00920&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'
GET
https://datacatalogapi.worldbank.org/dexapps/fone/api/metadata?assetId=DS00990