Integrations
Reviewed shipment data, delivered into the systems you already run.
13 of the 23 connectors below work today — 7 natively, 6 through the signed webhook or a structured export. The rest are listed with what they actually require, because a logo that quietly means “possible if you build it” wastes an evaluation you were doing in good faith.
7 live connectors
Built, tested, and configurable from your workspace without talking to us.
Nothing is dropped
Failed deliveries retry for about seven hours, then wait in a dead-letter log you can replay.
Writes are gated
No connector writes into your system while a critical discrepancy is open on the shipment.
What each label means
These five words are used the same way on every card, on the /v1/integrations endpoint and inside the product. If a connector is labelled here as doing something, it does it.
- Live
- Built, tested and available to configure yourself today.
- Beta
- Working and in use, with rough edges we will tell you about before you rely on it.
- Available via API
- Reachable today through our signed webhook or structured export, using your own code or an automation platform.
- Partner-assisted
- Deployed with your integration partner or middleware, because writing into this system unsupervised is not safe.
- Planned
- Not built. Listed so you can plan and tell us if you need it sooner.
How delivery actually works
An integration that silently drops an event is worse than no integration, because you believe your downstream system is in sync when it is not. So the queue is visible and the failures are yours to inspect.
- 1Queued before it is sentThe event row is written first, then attempted. A crash mid-send leaves work to pick up, not an event nobody recorded.
- 2Retried on a real scheduleAbout 1 minute, 5 minutes, 15 minutes, 1 hour, then 6 hours — a little over seven hours of cover for an endpoint that broke overnight.
- 3Safe to receive twiceOne stable Idempotency-Key per event across every attempt, and the retry body is identical to the first attempt's.
- 4Dead-lettered, not deletedAfter the final attempt the delivery is listed in your workspace with its status code and error, and can be replayed with the original payload.
- 5Signed so you can verify itEach webhook carries X-GainingDocx-Signature: sha256=… — an HMAC of the exact request body using your endpoint's secret.
- 6Told when it gives upA dead-lettered delivery raises integration.delivery_failed to your other destinations, so a broken endpoint surfaces somewhere you are looking.
// Verify before you act on a payload.
import { createHmac, timingSafeEqual } from "node:crypto";
const raw = await request.text(); // the exact bytes, not a re-serialised object
const expected = "sha256=" + createHmac("sha256", process.env.GDX_WEBHOOK_SECRET)
.update(raw).digest("hex");
const received = request.headers.get("x-gainingdocx-signature") ?? "";
if (expected.length !== received.length ||
!timingSafeEqual(Buffer.from(expected), Buffer.from(received))) {
return new Response("bad signature", { status: 401 });
}
// Already processed this event? Acknowledge and stop.
const key = request.headers.get("idempotency-key");17 event types are published, each with the fields it carries. See the full event reference.
Email intake
LiveForward or copy documents to your private intake address and they are parsed and grouped automatically.
What it does
- Accept up to 20 attachments per message, within 25 MiB
- Group attachments into one shipment
- Return the result by email
What data is sent
- Inbound only — nothing leaves GainingDocx
- Retries
- Five queue attempts with backoff before the sender is notified.
- Duplicates
- Messages are deduplicated by Message-ID.
- Attachments
- 20 attachments, 25 MiB per message
Gmail
PlannedWatch a label or shared mailbox directly, with thread context and automatic archiving.
What it does
- Watch a label
- Deduplicate attachments
- Mark processed
What data is sent
- Inbound only
Permissions you grant
- gmail.readonly
- gmail.modify
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Planned: dedupe by message id.
Microsoft 365 mailbox
PlannedThe same watched-folder intake for Outlook and shared mailboxes, over OAuth rather than a forwarding rule.
What it does
- Watch a folder
- Deduplicate attachments
- Mark processed
What data is sent
- Inbound only
Permissions you grant
- Mail.Read
- Mail.ReadWrite
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Planned: dedupe by message id.
Cloud storage
Google Drive
PlannedWatch an incoming folder, then file reviewed documents and their reports into Reviewed or Needs Attention.
What it does
- Watch a folder
- Move the file on approval
- Write the JSON and PDF result alongside it
What data is sent
- Original document
- Discrepancy report
- Canonical JSON
Permissions you grant
- drive.file
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Planned: keyed on file id and revision.
Dropbox
PlannedWatched-folder intake and filing for teams working out of Dropbox.
What it does
- Watch a folder
- Move the file on approval
- Write the result alongside it
What data is sent
- Original document
- Discrepancy report
- Canonical JSON
Permissions you grant
- files.content.read
- files.content.write
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Planned: keyed on file id and content hash.
SFTP drop folder
PlannedWrite canonical JSON, CSV or XML into a folder your existing middleware already collects from.
What it does
- Write the export file
- Write the original document
- Write a manifest
What data is sent
- Reviewed export in your chosen profile
- Original document if enabled
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Planned: filenames carry the event id.
TMS and forwarding systems
CargoWise
Partner-assistedGenerate UniversalShipment XML and send it through your existing eAdaptor route or CargoWise partner.
What it does
- Generate UniversalShipment XML
- Bundle the original documents and the discrepancy report
- Deliver through your approved integration route
What data is sent
- Shipment and bill references
- Parties, ports, vessel and voyage
- Container and packing lines
- Review summary
We do not reconfigure your eAdaptor routing. Your CargoWise partner or middleware (for example Chain.io) deploys the route; we supply the payload, the field mapping and a testing checklist.
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- The DataTarget key is the bill number, so a repeat send updates rather than duplicates.
SAP / NetSuite / Dynamics
Partner-assistedDelivered through your integration partner or iPaaS using the canonical export, not a direct connector.
What it does
- Canonical JSON or XML export
- Field mapping support
What data is sent
- Reviewed export in your chosen profile
Enterprise ERP writes are delivered with your implementation partner. We supply the payload, mapping and testing checklist.
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Every delivery carries a stable Idempotency-Key; a retry repeats the original body byte for byte.
Magaya
PlannedFirst native TMS connector: find the shipment, attach documents and the report, and push approved values.
What it does
- Find a shipment by reference
- Attach the original document
- Attach the discrepancy report
- Add an internal note
- Update references
What data is sent
- Shipment references
- Approved field values
- Original documents and report
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Planned: external object ids stored against the shipment so a retry updates in place.
Accounting
Tally
LiveDownload a Tally purchase-voucher XML for an approved freight invoice and import it into your company file.
What it does
- Generate a Purchase voucher XML
- Map charge codes to expense ledgers
- Refuse export while a critical discrepancy is open
What data is sent
- Party ledger name
- Voucher date and reference
- Expense ledger lines and amounts
- Retries
- Not applicable — generated on request rather than delivered.
- Duplicates
- Tally rejects a voucher whose reference already exists, so a re-import is safe.
QuickBooks Online
Available via APIExport an approved freight invoice as a QuickBooks Bill payload today; a one-click connector that creates the draft bill is next.
What it does
- Generate a Bill payload from a reviewed freight invoice
- Refuse export while a critical discrepancy is open
What data is sent
- Vendor name
- Invoice number, date and currency
- Charge lines and amounts
- Shipment reference
Permissions you grant
- com.intuit.quickbooks.accounting
- Retries
- Not applicable — generated on request rather than delivered.
- Duplicates
- The payload carries the invoice number so a duplicate import is detectable.
Xero
Available via APIExport an approved freight invoice as a Xero ACCPAY bill, always as DRAFT.
What it does
- Generate a DRAFT ACCPAY invoice payload
- Refuse export while a critical discrepancy is open
What data is sent
- Contact name
- Invoice number, date and currency
- Line items and amounts
- Container tracking category
Permissions you grant
- accounting.transactions
- accounting.contacts
- Retries
- Not applicable — generated on request rather than delivered.
- Duplicates
- The payload carries the invoice number so a duplicate import is detectable.
Zoho Books
Available via APIExport an approved freight invoice as a Zoho Books bill payload.
What it does
- Generate a bill payload
- Refuse export while a critical discrepancy is open
What data is sent
- Vendor name
- Bill number, date and currency
- Line items and amounts
Permissions you grant
- ZohoBooks.bills.CREATE
- Retries
- Not applicable — generated on request rather than delivered.
- Duplicates
- The payload carries the bill number so a duplicate import is detectable.
Shipment visibility
Container tracking (Vizion / SeaRates)
PlannedCompare what the documents say against what the container is actually doing — the ETA on the arrival notice against the live one.
What it does
- Subscribe a container or bill to tracking
- Import milestones
- Raise a discrepancy when live ETA diverges from the notice
- Recalculate free-time deadlines
What data is sent
- Container numbers
- Bill of lading or booking number
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Planned: milestones keyed on carrier event id.
Collaboration
Slack
LivePost critical discrepancies, failed parses and free-time deadlines into a channel, with a link back to the evidence.
What it does
- Post a formatted message to a channel
- Filter to critical events only
- Deep-link to the shipment
What data is sent
- Shipment reference
- Field name and both conflicting values
- A link — never document images or file contents
Permissions you grant
- incoming-webhook
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Every delivery carries a stable Idempotency-Key; a retry repeats the original body byte for byte.
Microsoft Teams
LiveThe same channel alerts for Teams, using an incoming webhook so no tenant admin approval is needed.
What it does
- Post a card to a channel
- Filter to critical events only
- Deep-link to the shipment
What data is sent
- Shipment reference
- Field name and both conflicting values
- A link — never document images or file contents
Permissions you grant
- Incoming Webhook connector
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Every delivery carries a stable Idempotency-Key; a retry repeats the original body byte for byte.
Automation platforms
Make
Available via APITrigger any Make scenario from a GainingDocx event using a Custom Webhook module.
What it does
- Start a scenario
- Route to any of Make's own app modules
What data is sent
- The event body you subscribe to
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Every delivery carries a stable Idempotency-Key; a retry repeats the original body byte for byte.
Zapier
Available via APITrigger a Zap with the Webhooks by Zapier trigger. A listed Zapier app is planned.
What it does
- Start a Zap
- Route to any Zapier action app
What data is sent
- The event body you subscribe to
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Every delivery carries a stable Idempotency-Key; a retry repeats the original body byte for byte.
n8n
Available via APISelf-hosted automation with a Webhook node — useful where documents must not leave your own infrastructure.
What it does
- Start a workflow
- Verify the HMAC signature in a Function node
What data is sent
- The event body you subscribe to
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Every delivery carries a stable Idempotency-Key; a retry repeats the original body byte for byte.
Developer tools
Signed HTTPS webhook
LivePush every document, matching and review event to your own endpoint, signed so you can prove it came from us.
What it does
- POST a signed JSON event to your endpoint
- Retry automatically on failure
- Replay any delivery by hand
What data is sent
- Event type and id
- Shipment and document identifiers
- Discrepancy field names and both conflicting values
- No document images or file contents
- Retries
- Six attempts over about seven hours (1m, 5m, 15m, 1h, 6h), then dead-lettered for manual replay.
- Duplicates
- Every delivery carries a stable Idempotency-Key; a retry repeats the original body byte for byte.
- Limits
- No cap on outbound events; one in-flight delivery per destination.
REST API
LiveParse documents, read shipments and discrepancies, and manage destinations from your own code.
What it does
- Parse a document
- List and retrieve documents
- List shipments and their discrepancies
- Export a shipment in any mapping profile
- Create, test and inspect destinations
What data is sent
- Whatever your code requests
- Retries
- Client-controlled. 429 responses carry Retry-After.
- Duplicates
- Sending an Idempotency-Key header on a write is honoured for 24 hours.
- Limits
- 30/min on Free, 120/min on Pro, 300/min on Team, per key.
Structured export
LiveDownload or fetch a reviewed shipment as canonical JSON, CSV, or a mapping file shaped for a specific system.
What it does
- Canonical JSON
- Flat CSV
- CargoWise UniversalShipment XML
- Tally voucher XML
- QuickBooks / Xero / Zoho bill payloads
What data is sent
- Reviewed field values
- Discrepancy summary
- Standards crosswalk metadata
- Retries
- Not applicable — generated on request rather than delivered.
- Duplicates
- Deterministic — the same shipment and profile produce the same file.
Integration questions
- Do you have a native CargoWise integration?
- Not an unsupervised one, and we say so rather than letting the logo imply it. We generate the UniversalShipment XML and the field mapping; your CargoWise partner or middleware deploys the eAdaptor route. Reconfiguring a customer's eAdaptor routing blind would break integrations they already depend on, so it is not something we will do on your behalf.
- What happens if my endpoint is down when an event fires?
- The event is queued before it is sent, attempted immediately, then retried at roughly 1 minute, 5 minutes, 15 minutes, 1 hour and 6 hours. After the last attempt it is dead-lettered and shown in your workspace, where you can replay it by hand with the original body. Nothing is silently dropped.
- Will a retry create a duplicate record in my system?
- Only if you ignore the Idempotency-Key header. Every attempt of one event carries the same key and the same body, byte for byte, so a receiver that already committed attempt two can safely discard attempt three.
- Do document images ever leave GainingDocx?
- Only where a connector's declaration says so — the cloud-storage connectors write the original file into your own drive. Webhook and chat deliveries carry identifiers, field names and values, never file contents. Every entry on this page lists exactly what it transmits.
- Can you stop a bad value reaching my accounting system?
- That is the point of the product. Every write-back path checks the review state first and refuses while a critical discrepancy is open on the shipment. A wrong shipment reference is an annoyance; a wrong invoice line is money.
- What if the system I use is not listed?
- Use the signed webhook or the structured export with an automation platform such as Make, Zapier or n8n — that covers most systems without waiting for us. Tell us what you need and we will tell you honestly whether it is on the roadmap.
Connect your first destination
Add a Slack channel or a signed endpoint in your workspace and send a test event to it before you write any code against it.