Devex APIdevex.com ↗
Access Devex data via API: search global development tenders, grants, jobs, news, organizations, and events. Paginated JSON results with filters.
What is the Devex API?
The Devex API provides 6 endpoints covering global development sector data, from funding opportunities to job listings and news articles. The search_funding endpoint lets you query tenders and grants by type, status, and keyword, returning fields like deadline, places, status, and summarized_description. Organizations, events, and news are each searchable through dedicated endpoints, all returning structured, paginated JSON.
curl -X GET 'https://api.parse.bot/scraper/2b22b0e5-ffe3-49bb-8fab-c9f7c2f756b8/search_funding?page=1&limit=5&query=health&types=tender&statuses=forecast' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace devex-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Devex Global Development API — search funding, jobs, news, orgs, and events."""
from parse_apis.devex_global_development_api import (
Devex, FundingType, FundingStatus, FundingNotFound,
)
client = Devex()
# Search open tenders, iterate with a cap
for opp in client.fundingopportunitysummaries.search(
query="health", types=FundingType.TENDER, statuses=FundingStatus.OPEN, limit=3
):
print(opp.title, opp.deadline, opp.status)
# Drill into the first funding opportunity for full details
summary = client.fundingopportunitysummaries.search(query="water", limit=1).first()
if summary:
detail = summary.details()
print(detail.title, detail.value_display, detail.paywall_url)
# Search jobs
for job in client.jobs.search(query="climate", limit=3):
print(job.name, job.closing_date, job.career_level)
# Search news articles
for article in client.articles.search(query="development", limit=3):
print(article.title, article.publication_date, article.overline)
# Search organizations
for org in client.organizations.search(query="health", limit=3):
print(org.name, org.organization_size, org.active_jobs_count)
# List upcoming events
for event in client.events.list(limit=3):
print(event.title, event.starts_at, event.registration_open)
# Typed error handling: attempt to fetch a non-existent funding opportunity
try:
client.fundingopportunities.get(item_id="999999999")
except FundingNotFound as exc:
print(f"Not found: {exc.item_id}")
print("exercised: fundingopportunitysummaries.search / details / fundingopportunities.get / jobs.search / articles.search / organizations.search / events.list")
Search for funding opportunities (tenders, grants, programs, etc.) with various filters. Returns paginated results sorted by most recently updated. Each result carries an id, type, title, location, deadline, and status. Use get_funding_detail to retrieve value and awardee information for a specific opportunity.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| limit | integer | Number of results per page. |
| query | string | Keyword search query to filter funding opportunities. |
| types | string | Comma-separated funding types to filter by. Accepted values: tender, grant. |
| statuses | string | Comma-separated statuses to filter by. Accepted values: forecast, open, closed. |
{
"type": "object",
"fields": {
"data": "array of funding opportunity summary objects with id, type, title, places, deadline, status, and summarized_description",
"page": "object with pagination details including number, size, pages, prev_url, current_url, next_url",
"total": "integer total number of matching results"
},
"sample": {
"data": {
"data": [
{
"id": 879503,
"type": "tender",
"title": "Provision of Service for Pre-Feasibility Study of a Peacebuilding Impact Country Spotlight",
"places": [
{
"id": 1039,
"name": "Colombia",
"type": "Country"
}
],
"status": "open",
"deadline": "2026-06-23",
"summarized_description": "Descripcion del proyecto..."
}
],
"page": {
"size": 5,
"pages": 279656,
"number": 1,
"next_url": "/funding_projects?page%5Bnumber%5D=2&page%5Bsize%5D=5",
"prev_url": null,
"current_url": "/funding_projects?page%5Bnumber%5D=1&page%5Bsize%5D=5"
},
"total": 1398280
},
"status": "success"
}
}About the Devex API
Funding Opportunities
The search_funding endpoint returns paginated arrays of funding objects filtered by types (e.g., tender,grant) and statuses (e.g., forecast,open,closed). Each result includes id, title, places, deadline, status, and summarized_description. For full project scope, get_funding_detail accepts an item_id from search results and returns a funding_project object with value_display and awardees. When detailed content is gated behind a Devex Pro subscription, the response includes a paywall_url field; otherwise it is null.
Jobs, News, and Organizations
search_jobs returns development sector positions with fields including career_level, places, closing_date, employer_company, and news_topics. search_news covers global development journalism, returning article objects with title, overline, teaser, publication_date, thumbnail, authors, and news_topics. search_organizations surfaces donors, contractors, and NGOs, with fields for organization_size, organization_types, and country presence. All three endpoints accept query and pagination params (page, limit).
Events
search_events always returns upcoming events only — no historical data. Each event object includes title, description, starts_at, ends_at, overline, registration_open, slug_and_id, and thumbnail. Unlike the other endpoints, search_events does not accept a query parameter, so results cannot be filtered by keyword.
Pagination
Every endpoint returns a page object containing number, size, pages, prev_url, current_url, and next_url, making it straightforward to walk through large result sets. The total field at the top level gives the full count of matching records across all pages.
The Devex API is a managed, monitored endpoint for devex.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when devex.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official devex.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor open and forecast tenders by filtering
search_fundingonstatuses=open,forecastto track live procurement opportunities. - Build a development sector job board by querying
search_jobswith domain-specific keywords and surfacingemployer_companyandclosing_date. - Aggregate global development news feeds using
search_newswith topic-based queries, leveragingteaserandnews_topicsfor categorization. - Research donor and contractor networks by querying
search_organizationsand extractingorganization_typesand country coverage fields. - Track grant awardees for competitive intelligence by calling
get_funding_detailand reading theawardeesfield on completed opportunities. - Display an upcoming events calendar for the development sector using
search_eventswithregistration_openstatus and date fields. - Identify funded projects by geographic focus using the
placesfield returned across funding, job, and organization endpoints.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Devex have an official public developer API?+
What does `get_funding_detail` return when content is behind a Devex Pro subscription?+
funding_project object with base fields such as title, status, deadline, and summarized_description. When the full project scope or application procedures require a Pro subscription, the paywall_url field contains a URL to the gated page. When content is freely accessible, paywall_url is null.Can I filter events by keyword, topic, or date range?+
search_events does not currently accept a query, topic, or date filter — it returns upcoming events only and accepts only a limit parameter. The API covers event metadata including starts_at, ends_at, overline, and registration_open. You can fork it on Parse and revise it to add keyword or date-range filtering if your use case requires it.Does the API expose individual news article full text?+
search_news endpoint returns article objects with teaser, overline, title, authors, and news_topics, but does not include the full article body. You can fork it on Parse and revise it to add a detail endpoint that retrieves the full article content.How does pagination work across the endpoints?+
page object with number, size, pages, prev_url, current_url, and next_url alongside a top-level total count. Use the page and limit parameters to step through results. search_events accepts limit but does not expose a page parameter for offset navigation.