Datahub API Cheat Sheet

Created by James Omutsani, Modified on Thu, 4 Dec, 2025 at 3:05 PM by James Omutsani

For internal use only - REACH Data Hub Team 


https://reachdatahub.org  


Authentication


Basic Authentication

# With curl
curl -u "username:password" "https://reachdatahub.org/api/endpoint"

# With wget
wget --user=username --password=password "https://reachdatahub.org/api/endpoint"

curl -c cookies.txt -b cookies.txt -u "username:password" \

  "https://reachdatahub.org/api/endpoint"

Core Resources


Metadata API

Resource  Endpoint  Description
Data Elements  /api/dataElements  Get all data elements
Data Element Groups  /api/dataElementGroups  Group data elements
Indicators  /api/indicators  All indicators
Indicator Groups  /api/indicatorGroups  Group indicators
Data Sets  /api/dataSets  Data collection forms
Programs  /api/programs  Tracker programs
Organisation Units  /api/organisationUnits  Health facilities, districts
Organisation Unit Groups  /api/organisationUnitGroups  Group OUs
Categories  /api/categories  Data element categories
Category Options  /api/categoryOptions  Category options
Category Combos  /api/categoryCombos  Category combinations
Attributes  /api/attributes  Metadata attributes
Option Sets  /api/optionSets  Fixed value lists


Common Parameters:

?fields=id,name,code - Select specific fields
?filter=name:like:ANC - Filter results
?paging=false - Get all records
?pageSize=50 - Pagination size
?order=name:asc - Sort results


Data Value API


Operation  Endpoint  Method
Submit Data Values  /api/dataValues  POST
Get Data Values  /api/dataValues  GET
Bulk Data Value Import  /api/dataValueSets  POST


Example - Get data values:

curl -u "user:pass" "https://reachdatahub.org/api/dataValueSets?dataSet=pBOMPrpg1QX&period=202401&orgUnit=DiszpKrYNg8"


Example - Submit data:

json
{
  "dataSet": "pBOMPrpg1QX",
  "period": "202401",
  "orgUnit": "DiszpKrYNg8",
  "dataValues": [
    {"dataElement": "FTRrcoaog83", "value": "42"},
    {"dataElement": "Bpx0589u8y0", "value": "37"}
  ]
}


Analytics API

Analysis Type  Endpoint  Description
Aggregate Data  /api/analytics  Aggregate data analysis
Event Data  /api/analytics/events  Event/ tracker analysis
Enrollments  /api/analytics/enrollments  Program enrollments
Resource Table  /api/resourceTables  Rebuild analytics tables


Analytics Query Example:

curl -u "user:pass" \

  "https://reachdatahub.org/api/analytics?dimension=dx:fbfJHSPpUQD;cYeuwXTCPkU&dimension=pe:LAST_12_MONTHS&dimension=ou:O6uvpzGd5pu;LEVEL-2&displayProperty=NAME&skipMeta=false"


Tracker/Events API


Event Capture

Resource  Endpoint  Method
Single Event  /api/events/{id}  GET/PUT/DELETE
Multiple Events  /api/events  GET/POST
Event Query  /api/tracker/events  GET


Event Import Example:

{
  "events": [{
    "program": "eBAyeGv0exc",
    "orgUnit": "DiszpKrYNg8",
    "eventDate": "2024-01-15",
    "status": "COMPLETED",
    "dataValues": [
      {"dataElement": "qrur9Dvnyt5", "value": "Yes"}
    ]
  }]
}

Enrollments API

Resource  Endpoint  Method
Single Enrollment  /api/enrollments/{id}  GET/PUT/DELETE
Multiple Enrollments  /api/enrollments  GET/POST
Tracker Query  /api/tracker/enrollments  GET


User Management


Users & User Groups

Resource  Endpoint  Method
Users  /api/users  GET/POST/PUT
User Roles  /api/userRoles  GET/POST
User Groups  /api/userGroups  GET/POST


Get users with specific fields:

curl -u "user:pass" \
  "https://reachdatahub.org/api/users?fields=id,displayName,email,userCredentials[username]&paging=false"


System & Maintenance


System Info

Resource  Endpoint  Description
System Info  /api/system/info  Version, build info
Settings  /api/systemSettings  System configuration
Tasks  /api/tasks  Background tasks
Job Configurations  /api/jobConfigurations  Scheduled jobs


Metadata Import/Export

Operation  Endpoint  Method
Export Metadata  /api/metadata  GET
Import Metadata  /api/metadata  POST
Gist API  /api/gist  GET
Synchronization  /api/synchronization  GET/POST


GIS/Spatial


Maps & Boundaries

Resource  Endpoint  Description
Organisation Unit Geometry  /api/organisationUnits/{id}/geometry  GET/PUT
Maps  /api/maps  Map configurations
GeoJSON  /api/organisationUnits.geojson  Spatial data


Reports & Visualization


Charts, Maps, Reports

Resource  Endpoint  Description
Charts  /api/charts  Visualization charts
Maps  /api/maps  Thematic maps
Reports  /api/reports  Standard reports
Report Tables  /api/reportTables  Pivot tables
Dashboards  /api/dashboards  User dashboards
Visualizations  /api/visualizations  All visualizations


Performance Tips


Filtering & Searching

# Search by name
?filter=name:like:malaria

# Multiple filters
?filter=name:like:anc&filter=created:ge:2024-01-01

# Field selection (improves performance)
?fields=id,name,code,displayName

# Pagination control
?pageSize=1000&page=1


Bulk Operations


Use gzip compression for large requests

curl -H "Accept-Encoding: gzip" -H "Content-Type: application/json+gzip" \
  --data-binary @data.gz https://reachdatahub.org/api/dataValueSets



Async Operations

# Check task status
curl -u "user:pass" "https://reachdatahub.org/api/system/tasks/ANALYTICS_TABLE"

# Force analytics table update
curl -u "user:pass" -X POST "https://reachdatahub.org/api/resourceTables/analytics"


Security & Best Practices


1. API Tokens: Consider using API tokens instead of passwords

2. Rate Limiting: Be mindful of API rate limits

3. Bulk Operations: Use `dataValueSets` endpoint for bulk data

4. Field Selection: Always specify `fields` parameter to reduce payload

5. Compression: Enable gzip for large data transfers

6. Error Handling: Check HTTP status codes:
   - `200`: Success
   - `400`: Bad request
   - `401`: Unauthorized
   - `403`: Forbidden
   - `409`: Conflict (duplicate data)
   - `500`: Server error


Useful References


- DHIS2 API Documentation: `/api/` (browse via web browser)
- Swagger UI: `/api/api-docs` (if enabled)
- DHIS2 Core Documentation: [docs.dhis2.org](https://docs.dhis2.org/)
- API Version: 2.40 supports API versions 38, 39, and 40


Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article