The WorkWing console and mobile app run on the same platform you build on: the same records, the same organisation and brand boundaries, and the same row-level permissions an API key is held to. There is no separate integration database and no export to wait for.
Create and manage customers, jobs, projects, resources and schedules from your own systems, and have WorkWing tell you when something changes with webhooks. The API is on every plan, Free included.
Base URL
https://api.workwing.io/v1
Style
REST over HTTPS, JSON bodies, OpenAPI 3.0.3
Auth
Bearer API key, scoped per permission
Writes
Idempotency-Key header on every write
Rate limit
Per key, per minute: 60 on Free to 2,000 on Professional
Events
24 signed webhook events
Quick start
Create a key under Settings > API Keys, tick the permissions the integration needs, and copy it: it is shown once. Your organisation and brand come from the key, so the base URL is the same for everyone.
Every successful response puts the result under data. The getting started guide covers permissions, writes, errors and paging in full.
Core concepts
What holds across every endpoint, and where each is documented in full.
Authentication
Send the key as a bearer token. A key belongs to one brand and carries action:resource permissions such as read:jobs or create:customers. A call the key is not permitted answers 403 E_AP_1102.
Every POST, PATCH, PUT and DELETE carries an Idempotency-Key you generate. Retry with the same key and body within 24 hours and you get the original response, marked Idempotency-Replayed: true, rather than a second job.
Every failure has one envelope: a stable code to branch on, a message for your log and a request_id to quote to us. Codes are grouped by cause, so E_AP_10xx is authentication and E_AP_80xx is rate limiting.
The limit is per key, per minute, set by your plan: 60, 120, 600 or 2,000. Every response carries your position; going over returns 429 E_AP_8001 with Retry-After.
Lists filter, sort, select and page in the query string. select embeds related records in the same call. A page holds at most 1,000 rows; Prefer: count=exact puts the total in Content-Range.
WorkWing posts to your endpoint when a job, assignment, customer or resource changes. Each request is signed with HMAC-SHA256, retried when your endpoint fails, and carries a key so you can spot a repeat.
The reference below is rendered from one OpenAPI document. Each operation lists the permissions it needs as x-required-scopes. Generate a client from it, or give it to the AI assistant writing your integration.
The records most integrations start with. Each has its own section in the reference, with notes, attachments and custom fields where the record has them.
Resource
Collection
What it is
Jobs
/v1/jobs
A unit of work at a customer's site, built from a job type, with a status, a window, notes, parts and attachments.
Projects
/v1/projects
A job that owns a pool of jobs sharing a window and a crew.
Assignments
/v1/jobs/{jobId}/assignments
A resource put on a job, with its own status from en route to completed.
Customers
/v1/customers
The organisations and people you do work for.
Locations
/v1/locations
A customer's sites, with an address and coordinates.
Resources
/v1/resources
Your engineers and other field staff, with skills, working hours, absences and last known position.
Job types
/v1/job_templates
The kinds of work you do and the form each one carries. Read-only over the API.
Job schedules
/v1/job-schedules
Recurring work that creates jobs on a pattern, which you can pause, resume or cancel.
Custom fields
/v1/custom-field-definitions
Your own fields on jobs, customers and resources. Define them, then set values per record.
Brands
/v1/brands
Each brand's configuration and terminology. Read-only over the API.
Typical workflows
What integrations commonly do, with the calls involved. Most link to a recipe worked end to end.
Create a customer and schedule a jobFind or create the customer, pick the site, create the job from a job type with a window, then put an engineer on it. POST /v1/jobs, POST /v1/jobs/{jobId}/assignments
React to a completed jobReceive job.completed, check the signature, answer within ten seconds and handle each event once. job.completed
Sync completed jobs to accounts or a CRMFetch the job with its customer, site and parts in one call, create one record in the other system, and write your reference back. GET /v1/jobs/{jobId}?select=...
Keep customers in step overnightPage through customers, match on your own customer number and write only what changed, inside the rate limit. GET /v1/customers?limit=1000&offset=...
Build your own tracking pageShow a customer the job's stage, booked window and arrival estimate on your own site, with a position that is safe to share. GET /v1/jobs/{jobId}/tracking
Feed an operations dashboardPull job counts by status, schedule conflicts and each resource's day into your own reporting. GET /v1/jobs/summary, GET /v1/schedule/conflicts
Run an integration from your systemTrigger a saved integration and wait for its result inline, or collect it later by queue id. POST /v1/integrations/execute
Work in WorkWing from an AI assistantConnect Claude or ChatGPT over MCP to look up schedules and book jobs, acting as the signed-in user with that user's permissions. https://api.workwing.io/mcp
API reference
Every endpoint, with its request body, response shape, required permissions and a console to call it from. Rendered from openapi.json.