API Explorer
Temporal Coverage: FY2015 onwards
The World Bank Program Budget and All Funds represent the administrative budget for Bank Budget (BB) funds, Trust Funds, and Reimbursable Funds. BB funds are authorized by the World Bank's Board of Directors. Trust Funds are financing arrangements set up with contributions from one or more donors (and in some cases from the World Bank Group too) to support development-related activities. Reimbursable Funds represent revenues generated by the World Bank (WB) when costs incurred by the WB are reimbursed by clients, donors, or others for operational and administrative services provided to clients and/or for sharing administrative costs based on negotiated cost-sharing arrangements.
The World Bank Program Budget is aligned with World Bank Group goals through the strategic planning, budgeting, and performance review (W) process. The W process is a dynamic arrangement to set institutional priorities in response to global and country level client demand, and align available resources accordingly.
Data presented is based on the "Program Cost Summary" found within the Annex of each World Bank Budget paper. Data for each fiscal year is presented at the aggregate World Bank program group level, and then itemized by major work program within each unit in the World Bank.
Based on the Public Disclosure of the Budget Documents, which have been edited to remove potentially confidential and market-sensitive information.
WB Budget - BB presents the approved World Bank Budget.
WB Budget - All Funds presents the approved World Bank Budget and External Funds (reimbursables and Bank-Executed Trust Funds).
FY18 budget includes certain non-salary staff costs in program budgets that up to FY17 were included in Centrally Managed Accounts & Miscellaneous Programs.
External funds estimates presented in the FY21 budget document for operations restated to reflect the realigned operations structure.
To access the FY22 World Bank Budget for Public Disclosure please see:
Parameter | Value | Description | API FIELD NAME | Data Type |
---|---|---|---|---|
All Funds (US$, Millions) | Represents the sum of Bank Budget (BB), Trust Funds, and Reimbursable Funds. Trust Funds are a financing arrangement set up with contributions from one or more donors and in some cases, from the World Bank Group to support development-related activities. Reimbursable Funds represent revenues generated by the World Bank (WB) when costs incurred by the WB are reimbursed by clients, donors, or others for operational and administrative services provided to clients and/or for sharing administrative costs based on negotiated cost-sharing arrangements. | all_funds_us__millions | NUMBER | |
Bank Budget (BB) (US$, Millions) | Represents the World Bank's administrative expenses funded from IBRD and IDA revenue and is approved annually by the Board of Executive Directors. | bank_budget_bb_us__millions | NUMBER | |
Fiscal Year | Identifies the World Bank Group fiscal year, which is July 1 - June 30 (e.g., fiscal year 2009 represents July 1, 2008 to June 30, 2009). | fiscal_year | NUMBER | |
Notes | Footnotes or additional clarifications for a specific line item. | notes | STRING | |
Unit | Represents individual vice presidential units or organizational units that are responsible for undertaking operational activities, and providing institutional, governance and administrative services under the leadership and direction of the senior management team. | unit | STRING | |
Work Program | Represents the Bank’s units at an aggregate level clustered by major business processes, including: (i) The Country Engagement (CE) envelope: This includes funding for preparation and supervision work with respect to financial services (such as lending, grants and guarantees), knowledge services (advisory, technical assistance, economic and sector work) and convening services (country strategy and partner coordination/mobilization). (ii) The Global Engagement (GE) envelope: This includes funding for global engagement activities, without a specific country identification, including work on global public goods, global knowledge services, global convening services, and global programs administrative services. (iii) Program and Practice Management (PPM): This envelope funds the cost of running the operational work program, and includes funding for management, administrative support services, space and IT costs, extended assignment benefits plus knowledge management, innovation and staff training/learning. (iv) Institutional, Governance and Administration (IG&A): This envelope funds the cost of running the institutional, governance and administrative services that support operational delivery. Total unit trajectories are the sum of operational and IG&A unit trajectories. | work_program | STRING | |
Work Program Group | Presents the World Bank’s units at an aggregate level clustered by major work programs, including: (i) Client Engagement (i.e., grouping of Country Engagement and Global Engagement); (ii) Program and Practice Management; (iii) Operational Grant Making Facilities; (iv) Institutional, Governance and Administrative services; (v) Centrally Managed Accounts; and (vi) External Funds. | work_program_group | 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 |
fetch('https://datacatalogapi.worldbank.org/dexapps/fone/api/apiservice?datasetId=DS00032&resourceId=RS00029&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=DS00032&resourceId=RS00029&type=json';
fetchAllData(`${url}`).then(allData => {
// Do something with all the data
// console.log(allData);
})
.catch(error => {
console.error('Error:', error);
});
import requests
url = 'https://datacatalogapi.worldbank.org/dexapps/fone/api/apiservice?datasetId=DS00032&resourceId=RS00029&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 = 'DS00032'
resource_id = 'RS00029'
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)
$url = 'https://datacatalogapi.worldbank.org/dexapps/fone/api/apiservice?datasetId=DS00032&resourceId=RS00029&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=DS00032&resourceId=RS00029&type=json'
$allData = Fetch-AllData -baseUrl $baseUrl
# Do something with all the data
$allData | ConvertTo-Json | Write-Output
require 'net/http'
url = URI('https://datacatalogapi.worldbank.org/dexapps/fone/api/apiservice?datasetId=DS00032&resourceId=RS00029&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=DS00032&resourceId=RS00029&type=json'
all_data = fetch_all_data(base_url)
puts all_data
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=DS00032&resourceId=RS00029&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=DS00032&resourceId=RS00029&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;
}
}
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=DS00032&resourceId=RS00029&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=DS00032&resourceId=RS00029&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());
}
}
shell "curl -X GET https://datacatalogapi.worldbank.org/dexapps/fone/api/apiservice?datasetId=DS00032&resourceId=RS00029&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=DS00032&resourceId=RS00029&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
// Specify the URL you want to send the GET request to
$url = "https://datacatalogapi.worldbank.org/dexapps/fone/api/apiservice?datasetId=DS00032&resourceId=RS00029&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=DS00032&resourceId=RS00029&type=json';
$allData = fetchAllData($baseUrl);
print_r($allData);
clear
. import delimited "https://datacatalogapi.worldbank.org/dexapps/fone/api/apiservice?datasetId=DS00032&resourceId=RS00029&top=100&type=json"
clear
local base_url "https://datacatalogapi.worldbank.org/dexapps/fone/api/apiservice?datasetId=DS00032&resourceId=RS00029&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'