Skip to main content

Integrations

Eight connectors conformed. Nine declared. Cumulative, dated, rerunnable.

The counts are cumulative across every published build; each figure carries its date and its rerun command on the reconciliation page. Every connector below states what it was proven against, not what it is aimed at. Two were built from reviewed conformance specifications. Six were derived from public vendor documentation. Nine are scaffolds that report validated: false and cannot be promoted without a real tenant.

What "conformed" means here, precisely

Conformed means the adapter was executed against the published contract and passed every case. It does not mean it has run against a live instance of that vendor's system. No connector has. That distinction is the difference between a claim we can prove and one we cannot, so it is labelled on every row rather than in a footnote.

Reproduce this yourself: node tests/conformance/run-conformance.mjs at the release root. It runs every suite in that directory and prints the total. Today that is 34 suites and 823 cases, 0 failing, offline, no account, no vendor in the loop. If you run it and get a different number, this page is wrong and we want to know.

Conformed connectors

SystemEntityContract provenanceCasesStatus
SAP S/4HANAPurchaseOrderReviewed conformance specification. OData v4, OAuth client credentials, LastChangeDateTime delta12/12Conformed
NetSuitePurchaseOrderReviewed conformance specification. Self-identifies the account-timezone trap on lastmodifieddate12/12Conformed
Oracle FusionPurchaseOrderDerived from public REST documentation6/6Conformed
Microsoft Dynamics 365 F&OPurchaseOrderDerived from public OData documentation6/6Conformed
CoupaPurchaseOrderDerived from public Core API documentation6/6Conformed
Infor CloudSuitePurchaseOrderDerived from public ION/M3 documentation6/6Conformed
WorkdayWorker (HCM)Derived from public RaaS/REST documentation8/8Conformed
Generic RESTPurchaseOrderConfiguration-driven. You supply the field map6/6Conformed

Source: src/adapters/, tests/conformance/. The adapter-specific subset is included in the 34/823 total above rather than counted separately, so the number on this page and the number the command prints are always the same number.

Declared scaffolds

Nine further systems have adapter scaffolds carrying 117 conformance cases at mock maturity. They are not conformed and the suite enforces that. After a successful fetch, each must still report validated: false; forcing it true fails nine cases immediately.

SystemCasesStatus
SAP Ariba13Scaffold declared
SAP ECC13Scaffold declared
Jaggaer13Scaffold declared
Ivalua13Scaffold declared
Anaplan13Scaffold declared
o9 Solutions13Scaffold declared
DocuSign CLM13Scaffold declared
Ironclad13Scaffold declared
Salesforce13Scaffold declared

Why a scaffold cannot be promoted from here

Passing against a faithful mock proves an adapter conforms to a specification derived from public documentation. It does not prove the vendor's real API matches that reading. Endpoint paths, field names, status enumerations and pagination shapes are customer-configurable and version-dependent. Ariba realms, ECC release levels, Salesforce custom objects and Ivalua configurations all vary per deployment. Promotion requires tenant access or a customer-confirmed field mapping, a written conformance specification, a run against the real system, and a signed tenant-confirmation artifact. Until all four exist, the honest label is the one above.

What every connector does, and never does

Reads a delta

Changed records since the last cursor, never a full corpus scan. Proven against a 12,000-record corpus with a 3-record delta: zero full scans.

Maps to canonical

Source fields to the canonical object, with the source, timestamp and record reference retained so the trace reconstructs later.

Never writes

There is no write method to disable. The write-path suite passes 9/9 because no write call exists to fail with.

Preserves disagreement

When two systems report different values for one object at the same timestamp, the connector surfaces the conflict rather than picking a winner.

Isolates bad rows

A malformed source row is skipped and reported, never fatal. Cursor never advances past an unpersisted record.

Recovers auth mid-sync

A mid-sync 401 invalidates the cached token, re-authenticates and rebuilds the request rather than exhausting retries.

What you provide

ItemDetail
CredentialsRead-only service account per system. OAuth client credentials where the vendor supports it, API key where it does not. Held in a secrets vault, never in configuration.
ScopeOne entity to begin, typically PurchaseOrder. A slice, not the estate.
NetworkOutbound reachability from the EOS deployment to your systems. Air-gapped deployment is supported; the trade is manual delta transfer.
TimeThirty minutes to scope. An afternoon to deploy against a read-only slice.

Your stack is not on this list

The Generic REST connector is configuration-driven and takes a field map you supply. Where the source is honestly still a spreadsheet, there is a spreadsheet path, because most estates have one and pretending otherwise wastes the first meeting.

Tell us the two systems that disagree and we will say plainly whether a connector exists, whether a scaffold can be promoted, or whether it is new work.