Date: 2026-02-24 Status: Research complete (v2 — with Orcha-specific deep dive)
| 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.
| 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 |
| 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 |
x-api-key headerRequestStatus for resultexternalCode field is the primary key for upsert logicConfidence: HIGH — Write capability is extensively documented and confirmed.
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).
POST endpoints are real writes, not disguised reads:
POST /v1/vendors → creates/updates vendor recordsPOST /v1/accounts → creates/updates GL accountsPOST /v1/costCenters → creates/updates cost centersPOST /v1/purchaseOrders → imports purchase ordersPOST /v1/acknowledge → marks invoice as fetched (state change)POST /v2/invoices/{bumId} → sends invoice into Basware NetworkPOST /v2/files → uploads file attachmentsPOST /v1/smartpdf/invoiceUpload → submits PDF for OCR processingFull CRUD on master data: POST (create/update), PATCH (partial update), GET (read), DELETE (remove from API)
Invoice lifecycle write-backs: PrebookResponses, TransferResponses, PaymentResponses — all POST endpoints that update invoice state in Basware
FAQ confirms write concerns: "Manual changes get overwritten" by API updates — indicating API writes take precedence
| 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.
x-bwapi-signature-256 header)Tasks API to check for missed notificationstaskType: ConnectionTest on subscription creationPOST /v1/smartpdf/invoiceUploadFor each core Orcha integration need, here is what Basware supports with exact endpoints, constraints, and confidence levels.
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:
externalCode → creates if new, full-updates if exists (clears omitted fields)externalCode → partial update (preserves omitted fields)200 OK on success, async processing in backgroundConstraints:
externalCode must be unique and ≤ max field lengthWhat the customer must configure:
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:
bumId and X-BW-REQUEST-IDPOST /v2/files → get fileIdPOST /v2/invoices/{bumId} with processingPreference.sentTo (mandatory recipient endpoint)GET /v1.1/notifications?type=DocumentsReceivedSmartPDF flow:
POST /v1/smartpdf/invoiceUpload with receivingEmailAddress and notificationEmailAddressConstraints:
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:
POST /v2/files with multipart request (file + metadata: bumId, fileType)fileIdfileId in the invoice JSON payload sent via Invoices APIConstraints:
bumIdConfidence: 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.
Confidence: HIGH — Two complementary mechanisms confirmed.
| 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 |
| 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:
Tasks API as backupAccountingDocuments GET for detailed processing statusWaitingForPrebook → PrebookInProgress → Prebooked → WaitingForTransfer → TransferInProgress → Transferred → PaidConfidence: 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:
GET /v1/dataAccess/... endpoints provide raw production dataWhat this means for Orcha:
| 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 |
┌─────────────┐ 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 |
| 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 |
RequestStatus or listen via webhooksexternalCode strategy: Use as primary key for upserts. Recommended format: orcha_{entity_type}_{id} (e.g., orcha_vendor_12345)Tasks API for missed notificationstest-api.basware.com — develop and test before production