Basware API Integration Research

Date: 2026-02-24 Status: Research complete (v2 — with Orcha-specific deep dive)


1. Summary — Capability Matrix

Data Object Read (GET) Write (POST/PATCH) Delete Channel
Invoices (AP) YES — AccountingDocuments NO (invoices originate in Basware) NO AP API
Invoice Status YES — Status API (4 statuses) YES — Acknowledge, PrebookResponses, TransferResponses, PaymentResponses NO AP API
Vendors YES YES — POST/PATCH/DELETE YES AP API
Accounts (GL) YES YES — POST/PATCH/DELETE YES AP API
Cost Centers YES YES — POST/PATCH/DELETE YES AP API
Tax Codes YES YES — POST/PATCH/DELETE YES AP API
Payment Terms YES YES — POST/PATCH/DELETE YES AP API
Exchange Rates YES YES — POST/PATCH/DELETE YES AP API
Projects YES YES — POST/PATCH/DELETE YES AP API
Generic Lists YES YES — POST/PATCH/DELETE YES AP API
Advanced Validations YES YES — POST/PATCH/DELETE YES AP API
Advanced Permissions YES YES — POST/PATCH/DELETE YES AP API
Users YES YES — POST/PATCH/DELETE YES AP API
User Groups YES YES — POST/PATCH/DELETE YES AP API
Purchase Orders YES — ExportedPurchaseOrders YES — PurchaseOrders import YES AP API
Purchase Requisitions YES — ExportedPurchaseRequisitions YES — PurchaseRequisitions import YES AP API
Goods Receipts NO YES — PurchaseGoodsReceipts import YES AP API
Contracts YES — ExportedContracts YES — Contracts import YES AP API
Contract Spend YES — ExportedContractSpends NO NO AP API
Matching Orders YES YES — POST/PATCH/DELETE YES AP API
Network Invoices (send) N/A YES — POST /v2/invoices/{bumId} (Invoice, CreditNote, PaymentReceipt) NO Network API
Network Invoices (receive) YES — GET /v1/invoices/{bumid} N/A NO Network API
Network Files YES — GET /v1/files/{refId} YES — POST /v2/files (PDF, PNG, JPEG, XLSX, etc.) NO Network API
Network Notifications YES — GET /v1.1/notifications YES — POST /v1.1/notifications (send status) YES — DELETE to acknowledge Network API
Vault (archive) YES — Index API YES — Document Upload (ZIP) NO Vault API
SmartPDF Upload NO YES — POST /v1/smartpdf/invoiceUpload NO SmartPDF API
Raw Production Data YES NO NO Data Access API
Webhook Subscriptions YES YES — POST/PATCH NO AP API

Verdict: Basware has a comprehensive, well-documented REST API with full CRUD on master data, bidirectional invoice workflows, document upload, and event-driven webhooks. This is a mature API surface.


2. API Landscape

API Products (6 distinct APIs)

API Purpose Auth Regions
AP Automation API Master data import, invoice transfer to ERP, PO matching, procurement OAuth2 (client credentials) or Basic Auth EU, US, AU, CA
Network APIs Send/receive e-invoices across Basware Network Basic Auth EU (default)
Vault APIs Invoice archival and retrieval Basic Auth EU only
SmartPDF API Upload PDF invoices for OCR processing API Key (x-api-key) EU only
Data Access APIs Raw production data extraction for analytics OAuth2 EU, US, AU
Push Notification APIs Webhook subscriptions for event-driven integration (Part of AP API) EU, US, AU, CA

Regional Endpoints

Region Production Test Swagger
Europe api.basware.com test-api.basware.com api.basware.com/swagger/index.html
USA api.us.basware.com test-api.us.basware.com api.us.basware.com/swagger/index.html
Australia api.au.basware.com test-api.au.basware.com api.au.basware.com/swagger/index.html
Canada api.ca.basware.com test-api.ca.basware.com api.ca.basware.com/swagger/index.html

Authentication

Rate Limits & Fair Use

Key Behaviors


3. Write Capability Verification

Confidence: HIGH — Write capability is extensively documented and confirmed.

Evidence

  1. Official docs explicitly state: "Data import APIs are intended only for importing data from Customer systems to Basware systems" — confirming one-directional write (customer → Basware).

  2. POST endpoints are real writes, not disguised reads:

  3. Full CRUD on master data: POST (create/update), PATCH (partial update), GET (read), DELETE (remove from API)

  4. Invoice lifecycle write-backs: PrebookResponses, TransferResponses, PaymentResponses — all POST endpoints that update invoice state in Basware

  5. FAQ confirms write concerns: "Manual changes get overwritten" by API updates — indicating API writes take precedence


4. iPaaS & Middleware Findings

Platform Pre-built Basware Connector? Notes
Celigo NO — not found in marketplace Could use universal HTTP connector
Workato NO — not found in connector docs Could use universal HTTP connector
Zapier NO — not found Not a target for enterprise AP automation
Make.com NO — not found Not a target for enterprise AP automation
n8n NO — no built-in node Could use HTTP Request node
Chift NO — Basware not listed as connector Chift focuses on accounting/POS/ecommerce tools

Key insight: No major iPaaS has a pre-built Basware connector. This is consistent with Basware's enterprise positioning — their customers typically build direct API integrations or use XML/SFTP. The API itself is well-documented enough that middleware is unnecessary.


5. Alternative Channels

SFTP (XML-based integration)

Webhooks (Push Notifications)

XML Integration

SmartPDF

Postman Collections


6. Orcha-Specific Deep Dive

For each core Orcha integration need, here is what Basware supports with exact endpoints, constraints, and confidence levels.

6.1 Write Reference Data (Cost Centers, Accounts, GL Codes)

Confidence: HIGH — Full CRUD confirmed with examples.

Data Object Endpoint Methods Key Fields
GL Accounts POST /v1/accounts POST, PATCH, GET, DELETE externalCode, companyCode
Cost Centers POST /v1/costCenters POST, PATCH, GET, DELETE externalCode, language translations
Tax Codes POST /v1/taxCodes POST, PATCH, GET, DELETE externalCode
Payment Terms POST /v1/paymentTerms POST, PATCH, GET, DELETE externalCode
Projects POST /v1/projects POST, PATCH, GET, DELETE externalCode
Generic Lists POST /v1/genericLists POST, PATCH, GET, DELETE Custom coding dimensions
Exchange Rates POST /v1/exchangeRates POST, PATCH, GET, DELETE externalCode
Vendors POST /v1/vendors POST, PATCH, GET, DELETE externalCode, bank accounts, orderingMethod
Validation Rules POST /v1/advancedValidations POST, PATCH, GET, DELETE Custom validation logic

How it works:

Constraints:

What the customer must configure:

6.2 Write Transactional Data (Invoices, Credit Notes)

Confidence: HIGH — Multiple confirmed paths for pushing invoices.

Operation API Endpoint Notes
Send invoice via Network Network API POST /v2/invoices/{bumId} Supports Invoice, CreditNote, PaymentReceipt document types
Upload PDF for OCR SmartPDF API POST /v1/smartpdf/invoiceUpload Returns pre-signed URL; EU only
Import POs for matching AP API POST /v1/purchaseOrders For 3-way matching
Import goods receipts AP API POST /v1/purchaseGoodsReceipts For 3-way matching

Network API invoice send flow:

  1. Generate UUID for bumId and X-BW-REQUEST-ID
  2. Upload attachments: POST /v2/files → get fileId
  3. Send invoice JSON: POST /v2/invoices/{bumId} with processingPreference.sentTo (mandatory recipient endpoint)
  4. Receive delivery notification via GET /v1.1/notifications?type=DocumentsReceived

SmartPDF flow:

  1. POST /v1/smartpdf/invoiceUpload with receivingEmailAddress and notificationEmailAddress
  2. Receive pre-signed URL in response
  3. Upload PDF to pre-signed URL
  4. Basware OCR processes the document

Constraints:

6.3 Attach Documents (PDF/Image Attachments)

Confidence: HIGH — Confirmed via both Network Files API and Vault API.

Method Endpoint Supported Formats Notes
Network Files API POST /v2/files CSV, DOC, DOCX, HTM, HTML, JPEG, JPG, ODT, PDF, PNG, PPT, PPTX, RTF, TIF, TIFF, TXT, XLS, XLSX, XML, ZIP Returns fileId for linking to invoice
Vault API POST /v1/vault/documents ZIP (containing invoice files, images, attachments, digital signatures) For archival purposes

Network Files upload flow:

  1. POST /v2/files with multipart request (file + metadata: bumId, fileType)
  2. Response: fileId
  3. Reference fileId in the invoice JSON payload sent via Invoices API

Constraints:

6.4 Trigger/Manage Approvals

Confidence: LOW — Basware does NOT expose approval actions via API. Approval workflows are internal to Basware AP Automation.

What's available What's NOT available
POST /v1/advancedPermissions — define WHO can approve (approval rights) No endpoint to programmatically approve/reject an invoice
Approval flows configured in Basware AP Automation Admin UI No endpoint to route a document to a specific approver
Status API returns InApprovalProcess status No webhook for "approval requested" events

What this means for Orcha:

Workaround: Use webhooks to detect when an invoice exits the approval process (AccountingDocuments with taskSubType: WaitingForTransfer), then pull the approved invoice.

6.5 Read Status / Lifecycle Events

Confidence: HIGH — Two complementary mechanisms confirmed.

Status Query API (pull-based)

Endpoint Method Input Output
GET /v1/accountingDocuments/status GET companyCode, invoiceNumber, invoiceDate, optionally grossSum Status string + invoiceId

Returned statuses:

Status Meaning
InApprovalProcess Invoice validated, being processed (all statuses before ERP transfer)
ReadyForPayment Approved, transferred to ERP
Paid Payment confirmed
Rejected Invoice rejected

Webhooks (push-based)

TaskType What it notifies about
AccountingDocuments Invoice ready for transfer/prebook
ExportedPurchaseOrders PO exported for retrieval
ExportedPurchaseRequisitions Requisition exported
ExportedContracts Contract exported
ExportedContractSpends Contract spend data available
RequestStatus Async request completed (success/error)

Webhook payload:

[{
  "taskId": "string",
  "taskStatus": "New",
  "taskType": "AccountingDocuments",
  "taskSubtype": "WaitingForTransfer",
  "documentId": "string"
}]

Webhook security: HMAC-SHA256 signature in x-bwapi-signature-256 header. Format: t=TIMESTAMP,v1=SIGNATURE. Validate by computing HMAC-SHA256(key, "TIMESTAMP.NOTIFICATION_PAYLOAD").

Network API notifications (for e-invoicing):

Action Code Meaning
Delivered Document delivered to recipient
Undelivered Delivery failed
DocumentAccepted Recipient accepted
DocumentRejected Recipient rejected
Paid Payment confirmed
PaymentInitiated Payment started
InvalidContent Validation failure

Constraints:

6.6 Sync Reference Data Inbound (Read Accounts, Vendors, Cost Centers)

Confidence: MEDIUM — GET is supported on all master data endpoints, but with caveats.

Data Object Endpoint Notes
GL Accounts GET /v1/accounts Returns records imported via API
Cost Centers GET /v1/costCenters Returns records imported via API
Vendors GET /v1/vendors Returns records imported via API
Tax Codes GET /v1/taxCodes Returns records imported via API
Payment Terms GET /v1/paymentTerms Returns records imported via API

Critical constraint: The AP Automation API is described as "one directional" — import APIs are for importing data from customer systems to Basware. The GET endpoints on master data return what was imported via API, not what exists natively in Basware AP Automation.

For reading Basware's actual production data (including data created within Basware), use the Data Access API instead:

What this means for Orcha:


7. Orcha Integration Capability Summary

Orcha Need Basware Endpoint(s) Confidence Notes
Write GL accounts POST/PATCH /v1/accounts HIGH Full CRUD, upsert via externalCode
Write cost centers POST/PATCH /v1/costCenters HIGH Full CRUD with language translations
Write vendors POST/PATCH /v1/vendors HIGH Full CRUD; payment terms must exist first
Write tax codes POST/PATCH /v1/taxCodes HIGH Full CRUD
Send invoices POST /v2/invoices/{bumId} (Network) HIGH Invoice, CreditNote, PaymentReceipt types
Upload PDF invoices POST /v1/smartpdf/invoiceUpload HIGH EU only, API Key auth
Attach files to invoices POST /v2/files (Network) HIGH 20+ file formats supported
Import POs for matching POST /v1/purchaseOrders HIGH Full CRUD
Approve/reject invoices None NOT POSSIBLE Approvals are Basware-internal only
Read invoice status GET /v1/accountingDocuments/status HIGH 4 statuses: InApproval, ReadyForPayment, Paid, Rejected
Invoice lifecycle webhooks POST /v1/subscriptions → receive events HIGH 6 taskTypes; HMAC-SHA256 signed
Read approved invoices GET /v1/accountingDocuments HIGH Full invoice data with coding
Confirm invoice transfer POST /v1/transferResponses HIGH Write-back to Basware
Confirm payment POST /v1/paymentResponses HIGH Write-back to Basware
Read reference data from Basware GET /v1/accounts etc. (API-imported only) OR Data Access API (full) MEDIUM Data Access API requires additional subscription

Architecture

┌─────────────┐     HTTPS/JSON      ┌──────────────────────────┐
│             │ ──────────────────→ │  Basware AP Automation   │
│   Orcha     │     OAuth2 auth     │  API (api.basware.com)   │
│  (Clojure)  │ ←────────────────── │                          │
│             │     Webhooks        │  + Network API           │
│             │ ←────────────────── │  + SmartPDF API          │
└─────────────┘                     └──────────────────────────┘
Approach Recommendation Rationale
Direct API RECOMMENDED Full control, no middleware cost, well-documented REST/JSON, matches Orcha's Clojure tech stack
iPaaS middleware NOT recommended No pre-built connectors; adds cost with no benefit
SFTP/XML Fallback only Batch-oriented, requires separate provisioning
Unified API NOT available Basware is not a connector in any unified API

Phased Integration Plan

Phase Scope Endpoints Complexity
Phase 1: Reference Data Sync Push GL accounts, cost centers, vendors, tax codes to Basware POST /v1/accounts, /costCenters, /vendors, /taxCodes, /paymentTerms Low — straightforward CRUD
Phase 2: Invoice Push Send invoices + attachments to Basware Network POST /v2/files, POST /v2/invoices/{bumId} Medium — UUID management, multi-step flow
Phase 3: Lifecycle Tracking Subscribe to webhooks, read invoice status, confirm transfer/payment POST /v1/subscriptions, GET /v1/accountingDocuments/status, POST /v1/transferResponses, POST /v1/paymentResponses Medium — async processing, webhook security
Phase 4: Analytics Extract raw data for reporting (if needed) Data Access API Low — read-only, but may need additional subscription

Implementation Considerations

  1. Authentication: OAuth2 client credentials flow → get token → include as Bearer token. Token refresh needed.
  2. Async processing: POST returns 202 → poll RequestStatus or listen via webhooks
  3. externalCode strategy: Use as primary key for upserts. Recommended format: orcha_{entity_type}_{id} (e.g., orcha_vendor_12345)
  4. Delta detection: Basware silently skips unchanged records. Always include a modified timestamp or version field to force processing.
  5. Rate limiting: Stay under 1000 calls/hour; ≥5 second gap between updates to same entity
  6. Webhook reliability: No retry — implement polling fallback via Tasks API for missed notifications
  7. Ordering constraints: Payment terms before vendors; accounts before invoices
  8. Credentials: Must be obtained from Basware delivery consultant (not self-service)
  9. Test environment: test-api.basware.com — develop and test before production

Access Requirements


9. Sources

Official Documentation

Swagger / OpenAPI

Basware Corporate

iPaaS (no pre-built connectors found)

Community