AvidXchange Integration: Setup and File Exchange
Connect AvidXchange, an accounts payable automation provider, to DualEntry to exchange three kinds of data as CSV files: your vendors, the bills AvidXchange captures, and the payments you make against those bills. DualEntry pushes vendors and bill payments to AvidXchange and imports bills from AvidXchange, keeping a copy of every file so you can audit each exchange. The integration is file-based and user-driven rather than a continuous live sync.Prerequisites
Confirm the following before using the integration:- An AvidXchange account, with AvidXchange’s onboarding team having configured your organization on their side. AvidXchange provisions the file exchange location for you; DualEntry does not self-serve that step.
- A DualEntry classification that represents your AvidXchange locations. DualEntry matches each bill line’s AvidXchange location to a classification line by name, so the names must align.
- Four custom fields configured in DualEntry and registered in the integration settings: an invoice number and invoice URL field (applied to bills), a project ID field, and an “Is AvidXchange vendor” checkbox field (applied to vendors).
- Your chart of accounts set up, because imported bill lines map to GL accounts by account number. A bill line referencing an account number that does not exist fails the import.
- A default bank account on each company that pays bills through AvidXchange. Bill payments draw on the paying company’s default bank account.
AvidXchange configures the file exchange for your organization during onboarding. Until AvidXchange has set up your side, file pushes and imports have nowhere to land. Coordinate go-live with your AvidXchange contact.
Onboard with AvidXchange
Onboarding with AvidXchange includes several steps and usually takes a few weeks. These steps include:- Bill export template set up within AvidXchange. Contact your DualEntry CX representative who provides an invoice export template for your AvidXchange rep to set up.
- Contact your DualEntry CX representative to request a dedicated file server setup within DualEntry. DualEntry then provides details on how to connect to this file server for you to share with your AvidXchange contact. AvidXchange then tests the connection and confirms successful file transfer.
- Manually update your chart of accounts, vendors and companies or locations within AvidXchange to align with the desired setup in DualEntry.
- Finally, once setup and testing have completed, a cut-over period is implemented. This period could range from one day to a week, depending on your preference. You cease to process bills within AvidXchange for a period of time and test file transfer with live bills and payment instruction files.
How the AvidXchange file exchange works
DualEntry and AvidXchange exchange data as CSV files rather than through a real-time API, and every exchange is recorded so you can trace it later. There are three exchange types, each flowing in one direction.- Vendors push (DualEntry to AvidXchange). DualEntry serializes the vendors you have flagged as AvidXchange vendors and sends them to AvidXchange.
- Bill upload (AvidXchange to DualEntry). You upload a CSV of bills in DualEntry that have been manually exported from AvidXchange, in the Bill import template format as implemented during the set-up phase. DualEntry then creates these as bills within your account.
- Bill payments push (DualEntry to AvidXchange). DualEntry sends the payments you make against AvidXchange bills back to AvidXchange for processing.
Configure the integration
Set up the integration once so DualEntry knows which classification and custom fields drive the AvidXchange exchange.- In DualEntry, create the AvidXchange integration from Settings → Integrations → AvidXchange. The integration connects immediately because it relies on the file exchange location AvidXchange provisions, not on credentials you enter.
- Create the four custom fields the integration needs, if they do not already exist: invoice number, invoice URL, project ID, and an “Is AvidXchange vendor” checkbox.
- Register each custom field and the AvidXchange location classification in the integration settings. DualEntry treats setup as incomplete until all four custom field settings, the location classification setting, and the classification itself are present.
- Mark the vendors you transact with through AvidXchange by setting their “Is AvidXchange vendor” field to true. Only flagged vendors are included in the vendor push.
Sync vendors to AvidXchange
DualEntry pushes vendor master data to AvidXchange so payments route to the right payee. Only vendors whose “Is AvidXchange vendor” field is set to true are included. The push runs automatically when a flagged vendor changes, with no fixed schedule. DualEntry reads the current set of AvidXchange vendors, serializes them to CSV, and sends the whole set to AvidXchange rather than only the changed record, so AvidXchange always receives a complete, current list. Each vendor record carries its name, name on check, address, contact details, vendor type, active status, and bank account details (account number, routing number, and account type) used for payment routing. Because the push re-sends every flagged vendor, the file AvidXchange receives reflects your latest vendor data at the moment of the change. To add a vendor to the exchange, set its “Is AvidXchange vendor” field to true; to stop sending one, clear the field. DualEntry skips the push entirely when no vendors are flagged.Import bills from AvidXchange
DualEntry imports bills from a CSV that AvidXchange produces, turning each invoice into a bill in your ledger. You upload the file from the AvidXchange integration; DualEntry validates and processes it in the background.- Export the bills CSV from AvidXchange.
- In DualEntry, upload the file on the AvidXchange integration page. The file must be a
.csvunder 10 MB. - DualEntry validates each row against the AvidXchange bill schema and stores the file. Processing then runs asynchronously.
Pay bills through AvidXchange
DualEntry creates vendor payments for the AvidXchange bills you select and pushes them to AvidXchange for processing. You choose the bills and the amount to pay for each. For each selected bill, DualEntry creates a posted vendor payment drawn on the paying company’s default bank account, assigns the next check number in that account’s sequence, and includes the bill’s invoice number. It then serializes the payments to CSV and pushes the file to AvidXchange. The whole operation is atomic: either every payment is created and pushed, or none are. Before creating payments, DualEntry validates that every selected bill exists, that each paying company has a default bank account, and that the account is active. If any check fails, the request is rejected and no payments are created. Bill payments currently support USD only; the exchange rate is fixed at 1.Review file exchange history
Every push and import is recorded so you can confirm what was sent or received and download the exact file. Use the file exchange history on the AvidXchange integration to audit activity. Each record shows the exchange type (vendors, bills upload, or bill payments), its status (created, pending, completed, or failed), the row count, the file size, who initiated it, and when. You can filter by type, status, and date range, and generate a download link for the stored CSV. Download links are presigned and expire after 24 hours, so generate a fresh link each time you need the file. Failed records carry the error message that explains why the exchange did not complete.Current limitations
A few constraints are worth knowing before you rely on the integration:- USD bill payments only. Payments push at an exchange rate of 1. Non-USD bills cannot be paid through AvidXchange yet.
- No scheduled sync. Vendor pushes are triggered by vendor changes, and bill imports and payment pushes are manual. There is no periodic background sync.
- Flagged vendors only. Vendors without the “Is AvidXchange vendor” field set to true are never pushed.
- AvidXchange-managed onboarding. AvidXchange configures the exchange location for your organization. You cannot complete the connection entirely from within DualEntry.
- CSV size cap. A bills upload file must be under 10 MB.
Troubleshoot exchange errors
When an exchange fails or a record does not appear, the most common causes are below.| Symptom | Cause | Resolution |
|---|---|---|
| Integration shows setup incomplete | A required custom field setting or the location classification is missing or points to a deleted record. | Configure all four custom fields and the location classification, and confirm the classification still exists. |
| Bills upload rejected immediately | The file is not a .csv, is empty, or exceeds 10 MB. | Re-export from AvidXchange as CSV under 10 MB and upload again. |
| Bills upload marked failed | One or more invoices reference a missing GL account number, an unmatched classification name, or a missing posting date. | Read the per-invoice errors on the failed exchange, correct the source data or mapping, and re-upload. The import is all-or-nothing. |
| Bill payment request rejected | A selected bill does not exist, a paying company has no default bank account, or its default bank account is inactive. | Set an active default bank account on each paying company and confirm the bill IDs, then retry. |
| Vendor not appearing in AvidXchange | The vendor’s “Is AvidXchange vendor” field is not set to true. | Set the field to true. The vendor is included on the next push. |
For maintainers
The details below describe connector configuration and internal endpoints, not user-facing features. The connector is namedavid internally.
- File storage: exchange copies are written to
s3://{S3_BUCKET}/integrations/avid/{org_id}/{exchange_type}_{timestamp}.csv. Presigned download URLs expire after 86400 seconds (24 hours). - Exchange types (
AvidFileExchangeType):vendors,bills_upload,bill_payments. Statuses (AvidFileExchangeStatus):created,pending,completed,failed. - Required settings (category
avid):AVID_LOCATION_CLASSIFICATION_ID,AVID_INVOICE_NUMBER_CUSTOM_FIELD_ID,AVID_INVOICE_URL_CUSTOM_FIELD_ID,AVID_PROJECT_ID_CUSTOM_FIELD_ID, andAVID_IS_AVID_VENDOR_CUSTOM_FIELD_ID. - API endpoints (router
Integrations - Avid):POST /create integration;GET {integration_id}/file-exchanges/history with filters;GET {integration_id}/file-exchanges/{exchange_id}/download_url/presigned download;POST {integration_id}/bills/upload/upload bills CSV;POST {integration_id}/bill-payments/create and push payments. - Async processing:
process_avid_bills_upload(Celery) parses and creates bills;maybe_sync_avid_vendorspushes vendors on change. Bills are created with per-invoice savepoints inside one transaction, so any failure rolls back the whole file. - Status page:
https://avidascend.betteruptime.com/.
