Invoices API
Create and manage fiscal documents through TaxIntents. The invoices API provides a high-level abstraction over EFRIS T109/T110/T111 operations.
Overview
The Invoices API is centered around TaxIntents - long-lived objects that represent the lifecycle of fiscal document issuance. This provides reliability, auditability, and correction capabilities that raw T-code calls lack.
Every invoice starts as a TaxIntent that goes through: creation → normalization → confirmation → processing → success/failure. This ensures data integrity and provides recovery from failures.
Create TaxIntent
Create a new TaxIntent with your invoice data. This creates a draft that can be reviewed and confirmed before fiscalization.
curl -X POST https://api.taxbridge.com/v1/tax-intents \
-H "Authorization: Bearer sk_test_1234567890abcdef" \
-H "X-Tax-Payer-ID: tp_your_taxpayer_id" \
-H "Content-Type: application/json" \
-d '{
"taxMethodId": "DOMESTIC_B2B_STANDARD",
"externalRef": "INV-2025-001",
"buyerName": "Acme Corporation Ltd",
"buyerTin": "1000058899",
"currency": "UGX",
"paymentMode": "101",
"items": [
{
"externalRef": "CHIA-50KG",
"description": "Organic Chia Seeds",
"quantity": 10,
"unitPrice": 50000,
"unit": "PA"
}
]
}' {
"id": "ti_xyz789",
"taxpayerId": "tp_123",
"externalRef": "INV-2025-001",
"status": "REQUIRES_NORMALIZATION",
"taxMethodId": "DOMESTIC_B2B_STANDARD",
"buyerName": "Acme Corporation Ltd",
"buyerTin": "1000058899",
"totalGross": "500000",
"currency": "UGX",
"items": [
{
"externalRef": "CHIA-50KG",
"quantity": 10,
"unitPrice": 50000,
"unit": "PA"
}
],
"createdAt": "2025-12-10T10:00:00Z"
} Confirm TaxIntent
Confirm a normalized TaxIntent to trigger fiscalization. This is the point of no return - the invoice will be submitted to URA.
curl -X POST https://api.taxbridge.com/v1/tax-intents/ti_xyz789/confirm \ -H "Authorization: Bearer sk_test_1234567890abcdef"
{
"message": "Submission queued",
"status": "PROCESSING"
} Get TaxIntent
Retrieve the current status and details of a TaxIntent. Poll this endpoint to track fiscalization progress.
curl https://api.taxbridge.com/v1/tax-intents/ti_xyz789 \ -H "Authorization: Bearer sk_test_1234567890abcdef"
{
"id": "ti_xyz789",
"status": "SUCCEEDED",
"fdn": "1234567890",
"verificationCode": "ABC123XYZ",
"qrCode": "base64_encoded_qr_data",
"lastError": null
} List TaxIntents
Get all TaxIntents for a specific taxpayer. Useful for displaying invoice history and status in your application.
curl "https://api.taxbridge.com/v1/tax-intents" \ -H "Authorization: Bearer sk_test_1234567890abcdef" \ -H "X-Tax-Payer-ID: tp_your_taxpayer_id"
Request Parameters
Create TaxIntent
| Parameter | Type | Required | Description |
|---|---|---|---|
| taxMethodId | string | Yes | Tax method ID (e.g., "DOMESTIC_B2B_STANDARD") |
| externalRef | string | Yes | Idempotency key for your reference |
| buyerName | string | No* | Required for B2B and Export |
| buyerTin | string | No* | Required for B2B |
| buyerPassportNum | string | No* | Export only (Passport of buyer) |
| currency | string | Yes | ISO Currency Code (e.g. "UGX", "USD") |
| items | array | Yes | Line items array |
Item Object
| Field | Type | Required | Description |
|---|---|---|---|
| externalRef | string | Yes | Your SKU (must be mapped in catalog) |
| quantity | number | Yes | Quantity in your units |
| unitPrice | number | Yes | Price per unit (excluding tax) |
| unit | string | Yes | Unit code (e.g. "PA", "KGM") |
Error Responses
Available Tax Methods
| Method ID | Description | VAT | Required Fields |
|---|---|---|---|
| DOMESTIC_B2B_STANDARD | Standard local B2B invoice | 18% | buyerTin, buyerName |
| DOMESTIC_B2C | Simplified B2C receipt | 18% | (None) |
| EXPORT_ZERO_RATED | Export invoice | 0% | buyerName, currency, buyerPassportNum (if applicable) |
| DOMESTIC_EXEMPT | VAT-Exempt Invoice | 0% | buyerName |