← Back to Documentation
Daftra logo

Daftra Integration with UAE FTA E-Invoicing via TrustBill

Connect Daftra (SaaS accounting + ERP, Arabic-first) to TrustBill for FTA PINT-AE e-invoicing · Version 1.0 · September 2026

Overview

This guide describes how Daftra — the UAE-born, Arabic-first cloud accounting + ERP platform — connects to TrustBill, a UAE FTA-accredited service provider (ASP), so Daftra users can issue PINT-AE compliant e-invoices without switching ERPs.

Daftra was built regionally with UAE VAT, TRN handling and Arabic-first UX baked in from day one. Its invoices already carry seller / buyer TRN and 5% VAT correctly. What it does not include natively is PINT-AE XML generation or transmission through an FTA-accredited ASP over the Peppol network. TrustBill is that missing piece.

Invoices flow out of Daftra through its REST API (or webhooks + REST fetch-back). TrustBill translates the payload into PINT-AE XML, validates it in real time, delivers it over Peppol via a certified ASP (Tron-Stride or Storecove), and the FTA acknowledgement is written back onto the Daftra invoice as a custom field.

What this integration delivers

  • Zero-code setup — no plug-in to install on the Daftra side; the customer just pastes an API key
  • Real-time push via Daftra webhooks + fetch-back over Daftra REST API
  • Arabic + English legal names preserved end to end (PINT-AE requires the Arabic seller name)
  • Sales invoices, credit notes and simplified tax invoices all mapped to PINT-AE document types
  • Daftra tax rows (5% VAT, Zero-Rated, Exempt, Reverse Charge, Out of Scope) auto-mapped to FTA tax categories
  • Live FTA status written back onto Daftra invoice custom fields — visible in the Daftra invoice list
  • Bulk migration path for historical Daftra invoices via CSV export
  • Multi-branch and multi-currency Daftra accounts supported

What is Daftra?

Daftra is a MENA-region cloud accounting and ERP suite delivered as SaaS on a per-company subdomain (<yourco>.daftra.com). It bundles accounting, invoicing, inventory, POS, HR, CRM and projects modules — with pricing tiers that scale by number of users and modules enabled.

  • Arabic-first UX with English translations across the board
  • Built with UAE VAT, TRN and FTA-aligned invoice layouts baked in — no extra localisation module required
  • Native REST API (versioned /api/v2/) that exposes invoices, clients, products, taxes, credit notes, purchases, expenses
  • Webhook subscriptions on invoice / credit-note / client events
  • Every account gets a unique subdomain; API calls are region- and account-scoped by subdomain

Why Daftra fits well with TrustBill: Daftra already handles TRN, Arabic, and UAE VAT correctly — the compliance-shape gap between what Daftra emits and what PINT-AE expects is small. Most customers reach acknowledged on their first real invoice.

Supported Daftra Plans & Modules

The TrustBill connector works on every Daftra plan that exposes the Sales Invoice module + API access. That's every paid plan; the free trial can also connect but is capped by Daftra's own request rate.

Daftra planAPI accessWebhooksSupport level
Free / TrialRate-limitedNoTesting only — upgrade for production
BasicYesLimitedFull via polling fallback
Standard / BusinessYesYesFull — recommended
Premium / EnterpriseYes + higher rate limitsYes + custom fieldsFull — recommended for > 500 invoices/month
Daftra POS moduleYes — POS receipts appear as Invoices with a POS flagSame as parent planFull — simplified tax invoice profile emitted for < 10,000 AED B2C

Daftra modules the connector reads from

ModuleRole in the flow
Invoicing / SalesPrimary source of out_invoice documents
Credit NotesSource of credit_note documents
PurchasesOptional source of purchase documents (roadmap)
ClientsBuyer TRN, Arabic + English name, address, country
ProductsItem SKU, description, UOM
TaxesTax rate + name → TrustBill taxCategory
POSRetail receipts flow as simplified invoices

Prerequisites

On the Daftra side

  • An active Daftra paid plan (Standard or higher recommended for webhook support)
  • Company profile completed with legal name (Arabic + English), country = United Arab Emirates, and the 15-digit UAE TRN under Settings → Company Info → Tax Number
  • Clients populated with a 15-digit TRN for every B2B customer (leave empty for B2C)
  • Tax rows configured for UAE — 5% VAT, Zero-Rated (Export / Healthcare / Education), Exempt, Reverse Charge
  • An admin user who can generate an API key from My Profile → API Keys
  • Daftra webhook feature enabled (Settings → Webhooks) if you want real-time push

On the TrustBill side

  • A TrustBill SME account (one account = one TRN = one Daftra subdomain)
  • Completed KYB (business verification) — trade licence + TRN certificate uploaded
  • Submission mode set to test or sandbox during onboarding, live for production
  • Per-tenant API credential (issued during the Sources → Add Daftra flow)

Integration Architecture

Because Daftra is SaaS-only with a first-class REST API, the flow mirrors the Zoho / QBO pattern: webhook triggers, TrustBill fetches, pipeline runs, write-back.

Outbound flow (Daftra → TrustBill → FTA)

  1. An invoice is created or updated in Daftra (Sales → New Invoice → Save).
  2. Daftra fires a webhook to the URL registered by TrustBill during connection setup.
  3. TrustBill's webhook receiver verifies the HMAC signature (using the Daftra webhook secret) and acknowledges immediately.
  4. Asynchronously, TrustBill fetches the full invoice + client + line items via the Daftra REST API using the stored API key.
  5. Payload is translated into TrustBill's InvoiceCreateInput shape.
  6. TrustBill calls its internal POST /v1/invoices — invoice stored as draft.
  7. If auto-submit is enabled, POST /v1/invoices/submit fires immediately.
  8. Pipeline: queued → transformed → validated → delivered. ASP forwards to FTA over Peppol.

Inbound flow (FTA → TrustBill → Daftra)

  1. The ASP posts an inbound webhook to TrustBill on FTA acknowledgement.
  2. TrustBill's Daftra worker calls the Daftra API to update the invoice's custom fields (trustbill_status, trustbill_ack_ref, trustbill_reject_reason).
  3. Daftra users see the status in the invoice list view; a filter can be added to show only invoices needing attention.

Connection Methods

Five paths, ordered from easiest (webhook + API) to most bespoke (Zapier).

1. Webhook + REST API (recommended)

TrustBill registers a webhook URL in Daftra Settings and stores your Daftra API key. Real-time push on invoice change, plus periodic delta polling as a safety net.

  • Real-time — status appears in TrustBill within seconds of Daftra Save
  • HMAC-signed webhooks — TrustBill verifies each payload
  • Safety-net poll (every 15 min) catches invoices where the webhook was dropped by transient network issues
  • Auto-detects your Daftra subdomain from the API key introspection

2. REST API polling only (no webhooks)

If your Daftra plan doesn't include webhooks, TrustBill can drive the sync purely by polling /api/v2/invoices?updated_since=<timestamp> every 5 minutes.

  • Zero Daftra-side setup beyond the API key
  • Up to 5 minutes of latency
  • Works on Basic plans

3. Zapier / Make (no-code)

TrustBill publishes Daftra connectors on Zapier and Make — build a "New Daftra invoice → Create TrustBill invoice → Submit" zap in minutes.

  • Best when your team already standardises on Zapier / Make
  • Handles retry, error branching, Slack/email notification on failure
  • Adds latency (Zapier polls Daftra every 1–15 min on paid plans)

4. Daftra Workflow Automation (paid plans)

Daftra Standard and above expose Workflow Automation — configure an action on Invoice status = Approved / Sent that POSTs to your TrustBill webhook URL. Useful when you want the trigger to be a specific status, not just any save.

5. CSV Export (one-off migrations)

Export invoices from Sales → Invoices → Export → CSV, run the TrustBill daftra-csv-normaliser to remap column headers, and upload via bulk import.

Which method should I use?

On Standard / Business / Premium plans, use the Webhook + REST API path. On Basic, use the REST API polling path. Use Zapier / Make only if your team already standardises on it. Use CSV only for one-off historical migrations before go-live.

Authentication (API Key + Subdomain)

Daftra uses API keys for programmatic access. Each key is tied to a specific user and inherits that user's permissions. TrustBill recommends creating a dedicated integration user (e.g. "TrustBill Sync") so its permissions can be audited independently.

Creating a Daftra API key

  1. Log into Daftra as the integration user
  2. Top-right avatar → My Profile
  3. Open the API Keys tab (some plans call it Integrations)
  4. Click Generate New Key and copy the token — Daftra shows it once
  5. Paste it into TrustBill Sources → Add Daftra along with your subdomain

Connection parameters TrustBill stores

ParameterExample
Daftra subdomainyourcompany (from https://yourcompany.daftra.com)
API base URLhttps://yourcompany.daftra.com/api/v2
API keyStored KMS-encrypted; never re-shown after save
Webhook secretTrustBill generates and returns it once at Sources setup; paste into Daftra Webhook config

Daftra API request header

GET /api/v2/invoices?updated_since=2026-09-08T00:00:00Z HTTP/1.1 Host: yourcompany.daftra.com APIKEY: {{stored_api_key}} Accept: application/json

Daftra also accepts the token as a ?apikey= query parameter — TrustBill uses the header form so keys never appear in web logs.

Idempotency-Key derivation for Daftra

Every TrustBill write endpoint requires an Idempotency-Key. Derive it from the Daftra invoice ID (integer, stable across renumbering):

Idempotency-Key: daftra::{subdomain}::invoice::{id}

Daftra webhook retries and the safety-net poll reuse the same key — TrustBill returns the cached response, so retries never create duplicate FTA submissions.

Daftra → PINT-AE Field Mapping

The connector translates Daftra's JSON invoice shape (/api/v2/invoices/{id}) into TrustBill's InvoiceCreateInput, which is then rendered into PINT-AE XML.

Header-level mapping

Daftra fieldTrustBill fieldNotes
no / codenumberDaftra's human-readable invoice number ("INV-2026-00042"); 1–64 chars
idIdempotency-Key + sellerInvoiceReferenceDaftra internal integer
dateissueDateISO YYYY-MM-DD
due_datedueDateOptional
currency_codecurrencyMust be AED; multi-currency invoices converted at exchange_rate
typeinvoiceTypeStandard Invoice → sale; POS receipts still sale with simplified profile
Company.legal_name_arseller.legalNameArabicRequired by PINT-AE
Company.legal_nameseller.nameEnglish legal name
Company.tax_numberseller.trn15-digit UAE TRN
client_idClientbuyerFetched from /api/v2/clients/{id}
Client.business_name_arbuyer.legalNameArabicArabic buyer legal name — preserved end to end
Client.business_namebuyer.nameEnglish buyer name
Client.tax_numberbuyer.trn15-digit TRN; leave empty for B2C
Client.countrybuyer.countryISO 3166-1 alpha-2 (Daftra stores full country name; connector normalises)
Client.address1, address2, city, state, zipbuyer.address.{line1,line2,city,state,postalCode}
reference_nobuyerReferenceCustomer PO or reference
notes / termsnotesConcatenated; visible in FTA-facing XML

Line-level mapping (items[])

Daftra fieldTrustBill fieldNotes
item / namelines[].descriptionSupports Arabic natively
descriptionAppended to lines[].descriptionSome Daftra deployments use a separate description; connector merges
quantitylines[].quantityMust be > 0
unit_price / pricelines[].unitPriceVAT-exclusive; connector strips VAT if the invoice header flags inclusive pricing
discountlines[].discountAmountAbsolute per-line discount, applied before VAT
product_id / skulines[].sellerItemIdPreserved for traceability
unit (from Product master)lines[].unitDaftra unit code mapped to UN/ECE Rec 20
tax1_id + tax1_percent (and tax2)lines[].vatRate + lines[].taxCategoryMapped via the Daftra Tax Mapping table; Daftra supports up to two stacked taxes per line

Totals are computed server-side

Do not send Daftra's subtotal / tax_total / total. TrustBill re-computes totals from lines[] and returns them so the connector can reconcile. If Daftra's total differs from TrustBill's by more than ±0.01 AED, the connector logs a variance and blocks submission until you re-save the invoice in Daftra.

Bilingual (Arabic + English) Handling

PINT-AE requires the Arabic legal name of the seller (and buyer, when applicable). Daftra stores both languages on the Company and Client masters — the connector reads both and preserves them end to end.

FieldDaftra sourcePINT-AE target
Seller Arabic legal name (required)Company.legal_name_arParty/PartyName/Name with @languageID="ar"
Seller English legal nameCompany.legal_nameParty/PartyName/Name with @languageID="en"
Buyer Arabic legal name (optional)Client.business_name_arEmitted when populated
Line descriptionitems[].item — accepts Arabic nativelyInvoiceLine/Item/Description
Notes / Termsnotes — accepts Arabic nativelyNote element

If Company.legal_name_ar is empty, TrustBill blocks submission with arabic_seller_name_required. Fill it in Daftra Settings → Company Info → Arabic Legal Name. This is an FTA rule, not a TrustBill one.

Create Invoice (draft)

Endpoint: POST /v1/invoices

A real Daftra invoice mapped to the TrustBill payload. Daftra invoice: INV-2026-00042 — Sale of translation services to a Dubai buyer at 5% VAT.

Request body

{ "number": "INV-2026-00042", "issueDate": "2026-09-08", "dueDate": "2026-10-08", "currency": "AED", "invoiceType": "sale", "buyer": { "name": "Gulf Media Group LLC", "legalNameArabic": "مجموعة إعلام الخليج ذ.م.م", "trn": "100324156700007", "country": "AE", "email": "ap@gulfmedia.example", "address": { "line1": "Media City, Building 8, Office 401", "city": "Dubai", "country": "AE" } }, "seller": { "name": "Daftra Language Services LLC", "legalNameArabic": "دفترة لخدمات اللغة ذ.م.م", "trn": "100100100100015", "country": "AE" }, "lines": [ { "description": "Arabic-English translation — 8,000 words", "sellerItemId": "SVC-TRANS-8K", "quantity": 1, "unit": "C62", "unitPrice": 3200.00, "vatRate": 0.05, "taxCategory": "standard_5" } ], "sellerInvoiceReference": "Daftra invoice_id 12847", "notes": "شكرًا لتعاملكم / Thank you for your business" }

Response (201 Created) — abbreviated:

{ "id": "a7c3e5b1-....-uuid", "number": "INV-2026-00042", "status": "draft", "invoiceType": "sale", "totals": { "subtotal": 3200, "tax": 160, "total": 3360, "currency": "AED" }, "pipeline": [], "errors": [], "submissionMode": "sandbox", "source": "daftra-connector" }

Credit Notes

Daftra credit notes are first-class documents at /api/v2/credit_notes. The connector reads them via the same webhook + fetch path as invoices.

Daftra documentinvoiceTypeRequired extra fields
Credit Note linked to an invoice (related_invoice_id set)credit_notereferencedInvoiceNumber = original invoice's no, reasonCode
Standalone Credit Notecredit_notereasonCode = OtherAdjustment

Sign convention: Daftra credit notes carry positive quantities and positive prices — send the same to TrustBill. The invoiceType tells the FTA that the document reverses the reference invoice; PINT-AE handles the sign in the XML.

Recurring Invoices

Daftra supports Recurring Invoices (Standard plan and above). Each cycle generates a child invoice — the connector treats each child as a fresh event:

  • Daftra fires the invoice-created webhook for every generated child
  • Each child gets its own id — fresh Idempotency-Key, fresh TrustBill draft, fresh FTA submission
  • The recurring template itself is not pushed to TrustBill — only the concrete invoices it produces
  • Pro-rated first / last cycles flow through the same mapping

Auto-submit tip: for recurring cycles, enable TrustBill's auto-submit on ingest. Otherwise every generated child sits as a draft in TrustBill waiting for a human to click Submit.

Submit Invoice(s) for Delivery

Creating a draft in TrustBill does not deliver the invoice to the FTA. Submission is an explicit second call.

Endpoint: POST /v1/invoices/submit

{ "ids": ["a7c3e5b1-....-uuid"] }

Recommended trigger for Daftra: use Daftra's Workflow Automation to fire the webhook only when the invoice reaches Sent or Approved status (not Draft). Then enable auto-submit on the TrustBill tenant so Sent-in-Daftra is effectively "Send to FTA".

Status Tracking & Custom Field Write-back

During Sources setup, the connector creates three custom fields on the Daftra invoice module. Every TrustBill status change writes back via the Daftra API.

TrustBill statusMeaningDaftra custom field written
draftCreated in TrustBill, not submittedtrustbill_status = Draft
queuedSubmitted, waiting for pipelinetrustbill_status = Queued
validatedPassed schema + Schematrontrustbill_status = Validated
deliveredSent to FTA via ASPtrustbill_status = Delivered
acknowledgedFTA confirmed receipt / validitytrustbill_status = Acknowledged, trustbill_ack_ref = <FTA ref>
rejectedFTA or ASP rejected the invoicetrustbill_status = Rejected, trustbill_reject_reason = <code>

Add the three fields to the invoice list column layout so you can filter and colour-code by TrustBill status directly inside Daftra: Sales → Invoices → Column Layout → Add Column → trustbill_status / trustbill_ack_ref / trustbill_reject_reason.

Bulk Migration from Daftra

To migrate historical Daftra invoices (up to 12 months back) into TrustBill:

  1. In Daftra: Sales → Invoices → filter by date range → Export → CSV
  2. Run the TrustBill daftra-csv-normaliser script to remap Daftra's column headers to the TrustBill schema below
  3. Upload in test mode via POST /v1/invoices/bulk
  4. Review the summary; repeat in sandbox and live

TrustBill CSV column headers

number,issueDate,dueDate,invoiceType,currency,sellerTrn,sellerName,sellerLegalNameArabic,buyerTrn,buyerName,buyerLegalNameArabic,buyerCountry,buyerAddressLine1,buyerCity,lineDescription,lineQty,lineUnit,lineUnitPrice,lineVatRate,lineTaxCategory,referencedInvoiceNumber,notes
LimitValue
Max rows per file1,000 invoices
Max file size5 MB
Partial successYes — bad rows reported without rolling back the batch

Test / Sandbox / Live Modes

Daftra does not provide a separate sandbox account — production is the only environment. Use TrustBill's mode switch to isolate testing invoices from the FTA network.

ModePurposeReaches FTA?
testLocal integration testing — no ASP callNo
sandboxEnd-to-end dry run against the ASP sandboxFTA sandbox only
liveReal, legally binding e-invoicingYes — the FTA production network

Recommended workflow: start in TrustBill sandbox for the first VAT-return period. Post real Daftra invoices as normal — they'll reach the FTA sandbox, not production. Reconcile Daftra's Reports → Tax Report against TrustBill's Delivered Invoices report, then switch to live.

Daftra Tax Mapping (UAE)

Daftra ships a preset of UAE VAT taxes on new company setups. The connector auto-maps them by rate + name. Custom-named taxes (common in older Daftra accounts) need a one-time mapping in TrustBill Settings → Daftra → Tax Mapping.

Daftra tax name (typical)RateTrustBill vatRateTrustBill taxCategory
ضريبة القيمة المضافة 5٪ / VAT 5%5%0.05standard_5
صفر بالمائة - تصدير / Zero-Rated Export0%0zero_rated_export
صفر بالمائة - رعاية صحية / Zero-Rated Healthcare0%0zero_rated_healthcare
صفر بالمائة - تعليم / Zero-Rated Education0%0zero_rated_education
معفى - مالي / Exempt FinancialExempt0exempt_financial
معفى - إيجار سكني / Exempt Residential RentExempt0exempt_residential_rent
آلية الاحتساب العكسي - منطقة معينة / Reverse Charge (Designated Zone)0%0reverse_charge_designated_zone
خارج النطاق / Out of ScopeOut of Scope0out_of_scope

The connector reads Tax.name and Tax.rate to guess the mapping. If your Daftra was set up years ago with custom-named taxes, add each name to the TrustBill mapping table once — the mapping survives Daftra plan upgrades.

UAE-Specific Scenarios

Free Zone / Designated Zone sellers

Set the flag on your TrustBill tenant (Settings → Company → Zone Type = Designated) — not in Daftra. It flows through as seller.designatedZone: true so PINT-AE emits the free-zone declaration correctly.

Margin scheme (used cars, antiques, second-hand goods)

Add a Daftra custom field Margin Scheme (boolean) to Products. When ticked, the connector sends lines[].marginScheme: true and uses the item's Cost Price as the margin base.

Reverse charge on imports

Purchase bills from non-UAE vendors using the Reverse Charge tax row map to invoiceType: purchase + taxCategory: reverse_charge_designated_zone. PINT-AE emits the ReverseCharge markers.

B2C simplified tax invoices (Daftra POS)

POS receipts and invoices where the client has no tax number automatically emit the PINT-AE simplified profile when the total is under 10,000 AED — no config needed.

Multi-Branch & Multi-Currency

Multi-branch

Daftra supports branches within a single account (Standard plan and above). Each branch typically shares the parent company's TRN, so a single TrustBill tenant is enough. If a branch has its own separate TRN (rare), set up one TrustBill tenant per branch and connect them with separate API keys.

Multi-currency

Daftra supports invoicing in currencies other than AED — the invoice header carries currency_code and an exchange_rate. The connector applies the exchange rate line-by-line to convert to AED before submission, since PINT-AE requires AED reporting. The original currency is preserved in the invoice notes for reconciliation.

Error Handling

TrustBill errors follow the shape { code, humanMessage, meta? }. The connector writes the code to the trustbill_reject_reason custom field on the Daftra invoice.

HTTPTypical codeDaftra root causeAction
400invalid_bodyClient missing tax_number, or line missing tax1_idFix the client / line in Daftra; connector auto-retries on next update
400arabic_seller_name_requiredCompany Arabic legal name emptyFill it in Daftra Settings → Company Info → Arabic Legal Name
400totals_mismatchDaftra per-line rounding vs TrustBill per-invoiceRe-save the invoice in Daftra; totals refresh
400unknown_taxCustom-named Daftra tax row not mappedAdd mapping in TrustBill Sources → Daftra → Tax Mapping
401daftra_api_key_invalidAPI key revoked or user disabledRegenerate the API key in Daftra Profile → API Keys, update in TrustBill Sources
401daftra_subdomain_wrongSubdomain changed (rare — e.g. rebrand)Update the subdomain in TrustBill Sources
403kyb_requiredTrustBill tenant not yet approved by complianceContact TrustBill support
403daftra_permission_deniedIntegration user lacks Invoicing module accessGrant the user Invoicing → View + Update permissions in Daftra
409invoice_mode_mismatchDaftra production invoices being pushed but TrustBill still in sandboxSwitch mode in TrustBill dashboard
409invoice_number_duplicateTwo Daftra branches share a numbering sequenceUse branch prefixes in Daftra Settings → Invoice Numbering
429daftra_rate_limitedDaftra API rate limit hit (typical on Basic plan)Automatic exponential backoff — no user action needed

Setup Checklist

  1. Confirm Daftra plan (Standard or higher recommended for webhook support)
  2. Complete Company Info in Daftra — legal name in both Arabic and English, country = United Arab Emirates, tax_number = 15-digit UAE TRN
  3. Populate customer TRNs in the Clients module for every B2B customer
  4. Confirm UAE tax rows exist (5% VAT, Zero-Rated, Exempt, Reverse Charge, Out of Scope) — Daftra ships them on new company setup, older accounts may need to add manually
  5. Create a dedicated integration user (e.g. "TrustBill Sync") with Invoicing + Clients + Products view/update permissions
  6. Generate an API key as that user from Profile → API Keys
  7. Create your TrustBill SME account and complete KYB (trade licence + TRN certificate)
  8. Open TrustBill Sources → Add Daftra and paste your subdomain + API key
  9. Copy the webhook URL + secret that TrustBill returns; paste them into Daftra Settings → Webhooks (event: Invoice created / updated)
  10. Confirm the tax mapping — connector auto-maps standard names, custom names need one-time mapping
  11. Enable sandbox mode in TrustBill
  12. Save a test invoice in Daftra — confirm trustbill_status = Acknowledged within 3 minutes
  13. Reconcile Daftra's Tax Report against TrustBill's Delivered Invoices
  14. Switch to live mode when FTA registration is complete

Suggested test cases before go-live

  • B2B invoice with Arabic + English client names — expect both preserved in PINT-AE XML
  • B2C invoice under 10,000 AED (client with no tax_number) — expect simplified profile
  • Credit note linked to an earlier invoice — expect matching pair
  • Export sale (client country = SA, USA, etc.) — expect zero_rated_export
  • Designated-zone customer — expect reverse-charge markers
  • Multi-line invoice with mixed VAT (5% + 0%) — expect two taxCategory values
  • Recurring invoice cycle — expect fresh FTA submission per cycle
  • Multi-currency invoice (USD, converted via Daftra exchange_rate) — expect AED-normalised totals
  • POS receipt at < 10,000 AED with anonymous client — expect simplified profile
  • Bulk upload of 500 historical invoices via CSV — expect partial success reported per row

Troubleshooting

SymptomLikely causeFix
Invoice saved in Daftra, nothing in TrustBillWebhook not delivered, or on a plan without webhooksCheck Daftra → Settings → Webhooks → Delivery Log; if Basic plan, safety-net poll fires every 15 min
Custom fields don't appear on the invoiceSources setup was skipped or user lacks custom-field permissionRe-run TrustBill Sources → Daftra → Verify Setup; the button re-creates missing fields
Arabic client name renders as ???Rare — pasted from a legacy Windows-1256 source into DaftraRe-type or paste from a UTF-8 source; Daftra itself stores UTF-8
arabic_seller_name_requiredCompany Arabic legal name empty (very common on English-first setups)Fill it in Company Info; connector re-emits on next invoice
Invoice stuck in queuedInsufficient TrustBill credit or KYB pendingCheck the TrustBill dashboard banner; top up credit
Invoice reaches rejected with "buyer_trn_invalid"Client TRN has spaces or is 14 digitsFix on the Client record; connector auto-retries on next update
totals_mismatch on inclusive-tax invoicesDaftra per-line rounding vs TrustBill per-invoiceIn Daftra: Settings → Invoicing → Tax Rounding → Total-of-Invoice
Webhook fails with 401 after some timeWebhook secret was rotated in TrustBillRegenerate the webhook secret in TrustBill Sources; paste new value into Daftra webhook config
Duplicate FTA submissions after a network blipCustom middleware forgot the Idempotency-KeyUse daftra::subdomain::invoice::id formula
Status write-back not appearing on Daftra invoiceIntegration user lacks Invoice update permissionGrant Invoicing → Update on the user's role in Daftra

Support & Contact

Technical Support

Escalation

For Daftra go-live escalations, please include: your TrustBill tenant ID, your Daftra subdomain, the Daftra invoice id of the failing invoice, and the timestamp of the failed pipeline run. TrustBill support responds to Daftra-tagged tickets within one business hour during UAE working days.