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 GETEvent 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 GETUser 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 dataReports & 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
Feedback sent
We appreciate your effort and will try to fix the article