URA EFRIS System-to-System API SDKs
The URA EFRIS SDKs are a family of production-ready, community-maintained SDKs designed to simplify integration with the Uganda Revenue Authority (URA) EFRIS System-to-System API across multiple programming languages.
These SDKs abstract the complexity of the EFRIS protocol—including JSON payload structure, encryption (RSA/AES), signature validation, token lifecycle management, and URA-specific business rules—allowing developers to focus on business logic, not API intricacies.
Supported Languages & Installation
Community-maintained SDKs are available for popular languages. Select your preferred language below:
- PHP
- JavaScript / Typescript
- Python
What These SDKs Solve
All SDKs are built around the same core principles derived from the official EFRIS API specification (v23.7+):
- ✅ Strict compliance with EFRIS JSON envelope structure (
data,globalInfo,returnStateInfo) - ✅ Automatic encryption/decryption handling for RSA/AES payloads and BASE64 encoding
- ✅ Signature generation & validation for online mode transactions
- ✅ Token & session management with T102/T103 initialization flows
- ✅ Payload validation against 300+ business rules before requests reach URA
- ✅ ReturnCode handling with human-readable error messages (e.g.,
3240: Buyer's status in deemed/exempt project is abnormal) - ✅ Dictionary synchronization (T115) for units of measure, currencies, tax categories, and commodity codes
- ✅ Sandbox & production environment support via configurable endpoints
This ensures predictable, auditable behavior regardless of your technology stack.
Who This Is For
These SDKs are ideal for:
- ERP & accounting systems (SAP, Oracle, QuickBooks integrations)
- Custom POS/e-commerce platforms requiring fiscal compliance
- Middleware services aggregating transactions from multiple sources
- Logistics & export systems generating customs-compliant invoices (SAD, HS codes)
- Fuel station management systems (EDC integration via T162–T172)
- Businesses operating across multiple URA-registered branches
Design Philosophy
- 🔹 One SDK method = one EFRIS interface code (e.g.,
uploadInvoice()→T109) - 🔹 No silent data mutation—all transformations are explicit and documented
- 🔹 Validation errors surface early—before network calls, with field-level guidance
- 🔹 Timezone & format awareness—handles
yyyy-MM-dd HH:mm:ss↔dd/MM/yyyy HH:mm:ssconversions - 🔹 Branch & agent-aware—supports
branchId,agentType, and principal/agent workflows
This aligns SDK behavior with URA audit expectations and simplifies troubleshooting during certification.
Key Configuration Requirements
Before using the SDKs, ensure you have:
| Requirement | Description |
|---|---|
| TIN | Valid Taxpayer Identification Number (10–20 digits) |
| DeviceNo (DSN) | Registered device serial number or virtual device ID |
| White-Box Keys | Obtained via T102 for online-mode encryption |
| Commodity Setup | Goods registered via T130 with valid goodsCategoryId |
| Branch Registration | All issuing branches pre-registered with URA |
| Network Access | Outbound HTTPS to efrisws.ura.go.ug or efristest.ura.go.ug |
Disclaimer
These SDKs are not officially endorsed by URA.
The Uganda Revenue Authority may update API behavior, validation rules, or interface specifications without notice.
Always:
- Test thoroughly in the URA sandbox environment
- Monitor the EFRIS Portal for announcements
- Validate requirements with your URA relationship manager before production deployment