Skip to content
WorkMesh

WorkMesh Developers

Connect WorkMesh data to the tool you already use.

The WorkMesh External API gives approved Business connections governed access to stable Systems, Fields and records. Choose a simple reporting format for analytics tools or the richer REST contract for application integrations.

Production API contract

https://api.workmesh.work/v1

Availability is enabled per WorkMesh Business. Your Business administrator creates a Connection, grants Systems and supplies a bearer credential.

Overview

One governed API, several client-friendly representations

Every External API request uses the same Business-scoped bearer credential, scopes, System grants, Field governance, rate controls and usage accounting. The response representation changes to suit the client; the authority model does not.

Stable identitiesSystem and Field keys remain stable when display labels change.
Reporting readyFlat JSON and CSV avoid nested record expansion for common analytics tools.
REST readyThe canonical JSON envelope retains metadata, typed values and cursor semantics for applications.

Choose a connection style

Start from your client, not from API internals

Client / use caseRecommended endpointWhy
Power BI, Tableau, Qlik, Excel and straightforward reporting/systems/{system_key}/records/flatRoot JSON array with WorkMesh Fields and linked Reference data promoted directly to columns.
CSV-oriented reporting or import tools/systems/{system_key}/records.csvDirect tabular CSV with no JSON expansion or Reference-table join step.
Custom REST application or middleware/systems/{system_key}/recordsRich canonical JSON envelope with logical record metadata and typed Field values.
Warehouse or recurring synchronisation/changes plus record endpointsUse a high-water cursor to retrieve only material changes after the initial snapshot.

Quick start

Call your first endpoint

Create a Connection in WorkMesh, grant the required Systems, copy the bearer credential when it is shown, then call the API.

curl https://api.workmesh.work/v1/business \ -H "Authorization: Bearer <WORKMESH_API_KEY>" \ -H "Accept: application/json"

List granted Systems

curl https://api.workmesh.work/v1/systems \ -H "Authorization: Bearer <WORKMESH_API_KEY>"

Every request receives an X-Request-Id response header for support and diagnostics.

Authentication

Business-owned bearer credentials

Send the credential in the HTTP Authorization header. WorkMesh does not accept External API credentials in query strings.

Authorization: Bearer wmk_prod_...
Secret handling

A credential is displayed once when created or rotated. WorkMesh stores only a protected digest. Do not place credentials in URLs, public source code or distributed browser/mobile client code.

Environments

Use the credential created for the environment you are connecting to

The normal API contract uses https://api.workmesh.work/v1. When connecting to a WorkMesh Test Business, use https://test.workmesh.work/v1 and the Test credential issued there. Test credentials use the wmk_test_ prefix; Production and Test credentials are not interchangeable.

API reference

Core read endpoints

GET
/business
Connected Business identity.
GET
/systems
Systems explicitly granted to the Connection.
GET
/systems/{system_key}
Current logical System metadata.
GET
/systems/{system_key}/schema
Current governed Field dictionary.
GET
/systems/{system_key}/records
Canonical paged REST records.
GET
/systems/{system_key}/records/flat
Reporting-friendly flat JSON array.
GET
/systems/{system_key}/records.csv
Reporting-friendly CSV rows.
GET
/systems/{system_key}/changes
Incremental material changes using an opaque cursor.
GET
/systems/{system_key}/records/{record_id}/history
Governed immutable History when the Connection has history scope.

Reporting tools

Rows and columns without Power Query surgery

The flat JSON and CSV representations promote each authorised WorkMesh Field to a top-level column using its stable field_key. Record metadata uses reserved columns beginning with an underscore, such as _record_id, _state and _updated_at.

Reference Fields are denormalised for reporting. When a System Field links to a Flat, Hierarchical or Heatmap Reference Table, WorkMesh resolves the selected Reference row and adds its business values directly to the reporting row using <field_key>__<reference_field> columns. The reporting client does not need to retrieve a Reference ID and perform another join. Raw Reference row IDs and physical table names are not exposed.

GET /v1/systems/risk_register/records/flat [ { "_record_id": "...", "_state": "Open", "risk_title": "Supplier delay", "risk_rating": "Extreme", "risk_rating__horizontal_label": "Likely", "risk_rating__horizontal_value": 4, "risk_rating__vertical_label": "Major", "risk_rating__vertical_value": 5, "risk_rating__cell_label": "Extreme", "risk_rating__cell_value": 20, "risk_rating__cell_colour": "#d32f2f" } ]

Flat and Hierarchical Reference Fields follow the same rule: all configured business fields on the selected Reference row are projected under the owning System Field prefix. Heatmap References expose the selected horizontal axis, vertical axis and cell data points. Choice Fields may retain field__key/field__keys, and Person Fields may retain a governed field__id; Reference Fields themselves are expanded instead of returning an opaque Reference link.

Power BI, Tableau and Qlik

Use /records/flat when the client handles JSON arrays well. Use /records.csv when you want the simplest tabular feed. Linked Reference values are already present as normal columns in both representations. Both count against the same Connection and Business usage controls as REST calls.

REST applications

Use the canonical envelope when your application needs richer semantics

The canonical records endpoint retains the structured response used for application integrations, including logical Reference identities where the application needs relationship semantics.

{ "data": [ { "record_id": "...", "system_key": "risk_register", "state": { "key": "open", "label": "Open" }, "fields": { "risk_title": "Supplier delay" } } ], "meta": { "count": 1, "next_cursor": null, "high_water_cursor": "..." } }

Restricted Fields are omitted server-side. Physical database names, table names, SQL columns and physical row IDs are not part of the customer API contract.

Paging and sync

Bounded extraction that scales beyond one page

Record endpoints default to 500 records and accept up to 1,000 per request, subject to the normal response-size guard. The canonical REST profile carries paging metadata in meta. Reporting profiles expose the same information in response headers, including X-WorkMesh-Next-Cursor, X-WorkMesh-High-Water-Cursor, X-WorkMesh-Record-Count and X-WorkMesh-Schema-Revision.

For recurring synchronisation, establish a high-water cursor, take the current snapshot, then use /changes?cursor=... to retrieve later material changes.

Usage

Every representation is measured against the same Business usage ledger

WorkMesh records bounded request metadata including Connection, credential, endpoint, records returned, response data size, status and duration. Business administrators can review current-month and lifetime API usage, including data volume by credential. Payload values and bearer secrets are not stored in the request ledger.

Where a Business contract later includes a monthly External API data allowance, the same measured usage can be shown against that allowance. No separate reporting-tool bypass exists.

Limits

Protect normal integrations without forcing tiny pages

GuardrailStarting contract
Requested page size500 default; maximum 1,000
Normal response targetApproximately 5 MiB uncompressed; a page may stop earlier
ConcurrencyUp to 5 concurrent requests per credential unless configured otherwise
Request rateUp to 60 requests/minute per credential unless configured otherwise
Business protectionAggregate Business limits also apply so multiple credentials cannot multiply capacity without bound

When throttled, WorkMesh returns HTTP 429 plus Retry-After when appropriate and rate-limit headers.

Errors

Stable machine codes and a useful request ID

StatusMeaning
400Malformed request or invalid cursor.
401Missing, invalid, expired, revoked or wrong-environment credential.
403Credential is valid but the Business capability or required scope does not allow the operation.
404Resource does not exist or is intentionally indistinguishable from inaccessible.
410Change or record cursor expired or was invalidated by a continuity-breaking restore.
429Credential or Business protection limit reached.
500/503Unexpected server or temporary service/configuration failure.

Security

Fail closed and preserve Business isolation

A bearer credential resolves its authoritative Business before WorkMesh opens a tenant database. The client cannot supply a trusted Business ID to redirect that credential into another Business. Connection scopes, System grants and Field policies narrow access further, regardless of whether the client chooses REST JSON, flat JSON or CSV.

Telemetry without payload logging

WorkMesh stores bounded operational metadata for usage, support and platform protection. It does not store unrestricted Business response bodies in the External API request ledger.