SAP Business One and Basware integration
SAP Business One runs the ERP and general ledger. Basware runs AP automation: invoice capture, coding, matching, and approval. Connecting the two keeps the data on both sides in step without re-keying. Vendors, open purchase orders, GL accounts, and cost centers from SAP Business One reach Basware so invoices code and match against current data, and once a Basware invoice is approved it posts back into SAP Business One as a purchase invoice. ml-connector handles the different APIs on each side and moves the records on a schedule you control.
What moves between them
Master data flows from SAP Business One into Basware: vendors filtered to suppliers, open purchase orders, GL accounts, and cost centers are imported so coders and approvers always see current options. Approved invoices flow the other way, from Basware into SAP Business One. When a Basware invoice reaches the ready-for-transfer state, ml-connector reads it and posts it into SAP Business One as a purchase invoice with line items and GL coding. After SAP Business One records the matching outgoing payment, ml-connector sends a payment confirmation back to Basware so the document shows as paid. Master data syncs on a schedule, invoice transfer can run on the Basware webhook, and Basware never initiates a bank payment.
How ml-connector handles it
ml-connector stores both credential sets encrypted, requests a Basware OAuth2 bearer token and renews it when a call returns 401, and on the SAP side accepts the full Service Layer base URL per customer, logs in for a B1SESSION cookie, and re-authenticates on the -5002 session timeout before replaying the request. Vendors, GL accounts, and cost centers are mapped first so every Basware coding line points at a SAP B1 account code and ProfitCenter that already exists. Invoice transfer can run on the Basware ready-for-transfer webhook, verified by the X-BWAPI-Signature-256 HMAC-SHA256 header over the raw UTF-8 body, with a scheduled poll as backup. SAP B1 has no idempotency key, so ml-connector checks for an existing purchase invoice by document number before posting to avoid duplicates, and Basware silently drops master records that are unchanged from the last import, so a real field change is required to retrigger one. Continuation tokens for Basware paging are carried in a request header, not a query parameter. Every record carries a full audit trail and failed calls can be replayed.
A real-world example
A mid-sized industrial distributor with about 300 staff runs SAP Business One for purchasing, inventory, and finance, and adopts Basware to automate a high volume of supplier invoices across several branches. Before the integration, AP clerks keyed approved invoices from Basware into SAP Business One by hand and kept vendor lists and cost centers aligned across both systems manually, which slowed close and produced coding that did not match the ledger. With SAP Business One and Basware connected, vendors, purchase orders, GL accounts, and cost centers stay current in Basware automatically, and approved invoices post into SAP Business One as purchase invoices on valid accounts. The clerks stop re-keying, coding matches the ledger, and payment status flows back so Basware reflects what SAP B1 has actually paid.
What you can do
- Import SAP Business One vendors, open purchase orders, GL accounts, and cost centers into Basware so coding and matching use current master data.
- Post Basware invoices that are approved and ready for transfer into SAP Business One as purchase invoices with line items and GL coding.
- Send payment confirmation back to Basware after SAP Business One records the matching outgoing payment.
- Bridge Basware OAuth2 client credentials with the SAP Business One B1SESSION cookie, renewing each on expiry.
- Trigger invoice transfer on the verified Basware webhook with a scheduled poll as backup, plus retries and a full audit trail.
Questions
- Which direction does data move between SAP Business One and Basware?
- Master data moves from SAP Business One into Basware: vendors, open purchase orders, GL accounts, and cost centers are imported so invoices code and match against current data. Approved invoices move the other way and post into SAP Business One as purchase invoices. Payment confirmation flows from SAP Business One back into Basware after the outgoing payment is recorded, and Basware never initiates a bank payment.
- How does the integration handle authentication on each side?
- Basware uses OAuth2 client credentials, where a client id and secret return a bearer token valid for about an hour with no refresh token, so ml-connector requests a new token on expiry. SAP Business One uses a session login that returns a B1SESSION cookie reused across requests until a 30 minute idle timeout. ml-connector stores both credential sets encrypted and re-authenticates on the SAP -5002 timeout before replaying the failed request.
- Does it use webhooks or polling?
- It uses both. Basware can push a signed notification when an invoice is ready for transfer, verified with the X-BWAPI-Signature-256 HMAC-SHA256 header over the raw UTF-8 body, and ml-connector posts that invoice into SAP Business One. SAP Business One webhooks require server-side admin setup and are not assumed, so master data is read by scheduled polling against the Service Layer with a scheduled poll backing up the Basware webhook.
Related integrations
More SAP Business One integrations
Other systems that connect to Basware
Connect SAP Business One and Basware
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started