ERP, billing and bank reconciliation
Send payments and accepted quotes to your ERP and automatically reconcile your bank transactions with pending payments, all in the BYO model (the ERP and the bank are yours).
This integration is a generic, neutral, global connector for your finance operations, with two independent capabilities: (1) send data to your ERP/accounting system when a payment is confirmed or a quote is accepted; and (2) receive transactions from your bank (via Open Banking, a financial aggregator like Plaid, Tink or TrueLayer, or the bank itself) and automatically reconcile them with pending payments. It works in any country and currency, with any ERP (QuickBooks, Xero, NetSuite, SAP, among others) and any bank. BYO model: the accounts and credentials are yours; there is no cost on our side.
Both start inert: nothing happens until you configure and activate. The secrets (ERP API key and bank webhook secret) are stored encrypted and are never displayed back.
Prerequisites
- ERP/Billing: an HTTP endpoint in your ERP (QuickBooks, Xero, NetSuite, SAP or another) able to receive a POST JSON, and the credential to authenticate it (API key or token).
- Bank reconciliation: an account with a bank or Open Banking aggregator (Plaid, Tink, TrueLayer or the bank itself) that can send transaction webhooks and sign them with HMAC-SHA256.
- In Sellio, administrator access to save and activate the connectors in Settings → Integrations.
ERP / Billing (sending)
When a payment is confirmed (by the payment provider's webhook or by bank reconciliation), or when the linked quote is accepted, the CRM makes a POST to your ERP endpoint with a JSON envelope in the format { event, data, source, sentAt }. The event indicates the fact (for example, payment.paid) and the data carries the fields (amount, currency, reference, quote/opportunity ids).
- Open Settings → Integrations and go to the "ERP / Billing" card.
- Endpoint (URL): paste your ERP address that receives the POST (e.g., https://erp.yourcompany.com/api/webhooks/crm).
- Authentication header and Prefix: enter how to authenticate (e.g., Authorization with prefix "Bearer ", or a custom header like X-Api-Key with no prefix).
- API key: paste your ERP key. It is stored encrypted.
- Save the connector, use "Send test" to validate and then click Activate. Automatic sending only occurs with the connector ACTIVATED.
Bank reconciliation (receiving)
You point your bank/Open Banking webhook to the URL the CRM generates. For each transaction received (a JSON with amount, currency, reference/description and an external id), the CRM looks for a PENDING payment that matches and marks it as paid.
- On the "Bank reconciliation" card, enter the Webhook secret (the key used to sign the calls) and save.
- Generate the webhook URL and paste it into your bank/Open Banking/aggregator.
- Configure the provider to sign the body of each call with HMAC-SHA256 and send the signature in the X-Signature header (hex or base64, with or without the sha256= prefix).
- Activate the integration.
How matching works
The CRM reconciles conservatively (it is money, so it never guesses) and country-agnostically: (1) it filters pending payments by the exact amount and, when the transaction reports the currency, by the same currency; (2) if the transaction carries a reference/description, it prefers the payment whose identifier (id, external id, quote or opportunity) appears in that reference; (3) with no reference to break the tie, it only reconciles if there is exactly one pending payment with that amount. If several payments have the same amount and nothing distinguishes them, the transaction stays unreconciled (for you to handle manually).
How to test
- ERP: with the connector activated, click "Send test" on the "ERP / Billing" card and confirm in your ERP that the POST arrived (look for the received webhook record/log).
- Bank reconciliation: create a pending payment with a unique amount and trigger (or simulate) a transaction in your bank/aggregator with the same amount and a reference that cites the quote/opportunity. Check that the payment became "Paid".
- Check the integration history/log to see the received calls and the reconciliation result.
Troubleshooting
- "Send test" fails with 401/403: the ERP API key is wrong or the authentication header/prefix does not match. Re-paste the key and check the header name (e.g., Authorization "Bearer ", or X-Api-Key).
- 404 when sending: the ERP endpoint is wrong or the route does not exist. Confirm the full URL that receives the POST.
- Invalid signature on reconciliation (webhook rejected): the webhook secret in the CRM differs from the one the bank uses to sign, or the signature does not come in the X-Signature header (HMAC-SHA256, hex or base64). Align the same secret on both sides.
- The transaction does not reconcile: there may be more than one pending payment with the same amount and no reference to break the tie, so include the id/quote in the transaction description, or reconcile manually. Also confirm the currency matches.
- Nothing happens on sending: automatic sending only occurs with the connector ACTIVATED. Activate it after saving.