{"openapi":"3.1.0","info":{"title":"Workloom API","version":"1.0.0","description":"The Workloom API: your contacts, companies and deals, and webhooks for what happens to them.\n\n**Keys.** Make one in Workloom under Settings › API and webhooks, and send it as `Authorization: Bearer wl_live_…` or `X-API-Key`. A key has scopes, acts either for the whole workspace or for one person (then it sees what they see), and can be a test key (`wl_test_…`): a test key reads the same records and changes nothing, answering every write with what would have happened and `livemode: false`.\n\n**Pages.** Lists return `{ data, has_more, next_cursor }`. Pass `next_cursor` back as `cursor`. At most 100 a page. Contacts, companies and deals sort with `sort` (`-` in front for newest or largest first); keep the same `sort` while you page.\n\n**Limits.** 300 requests a minute per key. Over that: 429 with `Retry-After`.\n\n**Errors.** `{ error, code }`. Branch on `code`.\n\n**Retries.** Send an `Idempotency-Key` on POST requests and a retry never creates twice.\n\n**Sandbox.** Starter and above get a developer sandbox: a separate workspace of fictional records at `https://sandbox-api.useworkloom.com/api/public/v1`, with `wl_sbx_` keys made inside it. Writes are saved there; nothing is ever sent, called or charged. Webhooks reach your server as usual, and `POST /sandbox/events` makes replies, meetings, calls and the rest happen. Make it in Workloom under Settings › API and webhooks.\n\n**Versions.** Additions (new fields, endpoints, events, error codes) arrive without notice, so ignore what you do not know. A change that would break an integration comes as a new dated version. Your key and your webhook endpoints stay on the version they were made on until you move them; send `Workloom-Version` to try another on one request. Every answer says its version in the `Workloom-Version` header."},"servers":[{"url":"https://api.useworkloom.com/api/public/v1"},{"url":"https://sandbox-api.useworkloom.com/api/public/v1","description":"Your developer sandbox: wl_sbx_ keys, fictional records, nothing sent"}],"security":[{"bearer":[]},{"apiKey":[]}],"tags":[{"name":"Start here"},{"name":"Contacts"},{"name":"Companies"},{"name":"Deals"},{"name":"Reports"},{"name":"Creative"},{"name":"Workspace"},{"name":"Activity"},{"name":"Lists"},{"name":"Outreach"},{"name":"Webhook endpoints"},{"name":"Webhooks"}],"paths":{"/":{"get":{"operationId":"root","tags":["Start here"],"summary":"Check your key","description":"Who the key belongs to, its scopes, whether it is live or test, the limits, and every endpoint. Needs no scope. The first call to make.\n\nNeeds a key, and no scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"About this key."}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/contacts":{"get":{"operationId":"contacts","tags":["Contacts"],"summary":"List contacts","description":"Contacts in your workspace, oldest first unless you `sort`. A key acting for one person sees only the contacts that person can see.\n\nNeeds the `contacts:read` scope.","parameters":[{"in":"query","required":false,"name":"email","description":"Only the contact with this email.","schema":{"type":"string"}},{"in":"query","required":false,"name":"updated_since","description":"Only contacts changed at or after this time (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"in":"query","required":false,"name":"sort","description":"Order by one field, oldest or smallest first; put `-` in front for newest or largest first. Empty values come first ascending and last descending. Default: oldest first. Keep the same `sort` while you follow `next_cursor`.","schema":{"type":"string","enum":["created_at","-created_at","updated_at","-updated_at"]}},{"in":"query","required":false,"name":"limit","description":"How many to return, 1 to 100. Default 25.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"in":"query","required":false,"name":"cursor","description":"The `next_cursor` from the previous page.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactList"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"contacts:read"},"post":{"operationId":"create_contact","tags":["Contacts"],"summary":"Add a contact","description":"Adds a contact, checked for duplicates exactly as adding one in Workloom is. A key acting for the workspace leaves the new contact unowned; a key acting for a person makes it theirs. Your routing rules run as for any new contact.\n\nNeeds the `contacts:write` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"contacts:write"}},"/contacts/{id}":{"get":{"operationId":"contact","tags":["Contacts"],"summary":"Get a contact","description":"Returns one contact. A contact the key cannot reach answers `not_found`, the same as one that does not exist.\n\nNeeds the `contacts:read` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The contact’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactResponse"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"contacts:read"},"patch":{"operationId":"update_contact","tags":["Contacts"],"summary":"Update a contact","description":"Changes only the fields you send. Every field is checked before any is saved, so a request that fails changes nothing. Changing `owner_seat_id` needs a key that acts for the whole workspace, or a role that reassigns records across it.\n\nNeeds the `contacts:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The contact’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"contacts:write"},"delete":{"operationId":"delete_contact","tags":["Contacts"],"summary":"Delete a contact","description":"Deletes the contact and keeps them suppressed: every channel is opted out, their sequences stop and they leave every weave, as \"Do not contact\" does in Workloom. The same email cannot be added again. A key acting for one person needs that person’s permission to delete records.\n\nNeeds the `contacts:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The contact’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"contacts:write"}},"/contacts/search":{"post":{"operationId":"search_contacts","tags":["Contacts"],"summary":"Search contacts","description":"Contacts matching every filter, oldest first unless you `sort` (created_at or updated_at), paged like the list. Searchable: email, first_name, last_name, full_name, phone, title, company_name, company_domain, company_id, linkedin_url, location.city, location.country, owner_seat_id, tags, created_at, updated_at, and custom_fields.<key>. Operators: eq, neq, in, gt, gte, lt, lte (numbers and dates), contains (text, case-insensitive; on tags, has the tag), exists.\n\nNeeds the `contacts:read` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Search"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactList"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"contacts:read"}},"/contacts/upsert":{"post":{"operationId":"upsert_contact","tags":["Contacts"],"summary":"Add or update a contact by email","description":"Changes the contact with this email, or adds one when there is none. `result` says which. A contact with the same email that a teammate owns, outside the key’s reach, is a `duplicate`; one that was deleted and suppressed is `suppressed`.\n\nNeeds the `contacts:write` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactUpsert"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","result","livemode"],"properties":{"data":{"$ref":"#/components/schemas/Contact"},"result":{"type":"string","enum":["created","updated"]},"livemode":{"type":"boolean"}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"contacts:write"}},"/companies":{"get":{"operationId":"companies","tags":["Companies"],"summary":"List companies","description":"Companies in your workspace, oldest first unless you `sort`. A key acting for one person sees the companies that person owns or whose people they can see.\n\nNeeds the `companies:read` scope.","parameters":[{"in":"query","required":false,"name":"domain","description":"Only the company with this domain.","schema":{"type":"string"}},{"in":"query","required":false,"name":"sort","description":"Order by one field, oldest or smallest first; put `-` in front for newest or largest first. Empty values come first ascending and last descending. Default: oldest first. Keep the same `sort` while you follow `next_cursor`.","schema":{"type":"string","enum":["created_at","-created_at","updated_at","-updated_at","employee_count","-employee_count"]}},{"in":"query","required":false,"name":"limit","description":"How many to return, 1 to 100. Default 25.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"in":"query","required":false,"name":"cursor","description":"The `next_cursor` from the previous page.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyList"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"companies:read"},"post":{"operationId":"create_company","tags":["Companies"],"summary":"Add a company","description":"Adds a company, checked for duplicates exactly as adding one in Workloom is: the same domain is refused, and the same name needs `force: true`. A key acting for a person makes it theirs.\n\nNeeds the `companies:write` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"companies:write"}},"/companies/{id}":{"get":{"operationId":"company","tags":["Companies"],"summary":"Get a company","description":"Returns one company. A company the key cannot reach answers `not_found`.\n\nNeeds the `companies:read` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The company’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"companies:read"},"patch":{"operationId":"update_company","tags":["Companies"],"summary":"Update a company","description":"Changes how your workspace holds the company: its owner and its tags. Size, location and the rest come from Workloom’s data and are not set over the API.\n\nNeeds the `companies:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The company’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"companies:write"}},"/companies/search":{"post":{"operationId":"search_companies","tags":["Companies"],"summary":"Search companies","description":"Companies matching every filter, oldest first unless you `sort` (created_at, updated_at or employee_count), paged like the list. Searchable: name, domain, industry, employee_count, employee_range, location.city, location.country, owner_seat_id, tags, created_at, updated_at, and custom_fields.<key>. Operators as for contacts.\n\nNeeds the `companies:read` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Search"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyList"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"companies:read"}},"/deals":{"get":{"operationId":"deals","tags":["Deals"],"summary":"List deals","description":"Deals on every pipeline, oldest first unless you `sort`. Deleted deals are left out. A key acting for one person sees only the deals that person can see.\n\nNeeds the `deals:read` scope.","parameters":[{"in":"query","required":false,"name":"status","description":"open, won, lost or parked.","schema":{"type":"string","enum":["open","won","lost","parked"]}},{"in":"query","required":false,"name":"stage","description":"A stage key.","schema":{"type":"string"}},{"in":"query","required":false,"name":"pipeline_id","description":"A pipeline. Omit for every pipeline.","schema":{"type":"string"}},{"in":"query","required":false,"name":"sort","description":"Order by one field, oldest or smallest first; put `-` in front for newest or largest first. Empty values come first ascending and last descending. Default: oldest first. Keep the same `sort` while you follow `next_cursor`.","schema":{"type":"string","enum":["created_at","-created_at","updated_at","-updated_at","amount","-amount","expected_close_date","-expected_close_date","closed_at","-closed_at"]}},{"in":"query","required":false,"name":"limit","description":"How many to return, 1 to 100. Default 25.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"in":"query","required":false,"name":"cursor","description":"The `next_cursor` from the previous page.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealList"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"deals:read"},"post":{"operationId":"create_deal","tags":["Deals"],"summary":"Create a deal","description":"Opens a deal with the same rules as the board: the stage must exist, a lost stage needs a reason, a stage’s required fields must be filled, and a contact has at most one open deal per pipeline.\n\nNeeds the `deals:write` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused` or `stage_requirements_missing`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"deals:write"}},"/deals/{id}":{"get":{"operationId":"deal","tags":["Deals"],"summary":"Get a deal","description":"Returns one deal.\n\nNeeds the `deals:read` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The deal’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealResponse"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"deals:read"},"patch":{"operationId":"update_deal","tags":["Deals"],"summary":"Update a deal","description":"Changes only the fields you send. The stage changes through the move endpoint, and `probability` and `forecast_category` come from the stage.\n\nNeeds the `deals:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The deal’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"deals:write"},"delete":{"operationId":"delete_deal","tags":["Deals"],"summary":"Delete a deal","description":"Deletes the deal. Its contact can be given a new deal in the same pipeline straight away. A key acting for one person needs that person’s permission to delete records.\n\nNeeds the `deals:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The deal’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"deals:write"}},"/deals/{id}/move":{"post":{"operationId":"move_deal","tags":["Deals"],"summary":"Move a deal","description":"Moves a deal to another stage of its pipeline, won and lost included. A lost stage needs `reason_code`, one of your lost reasons. A stage’s required fields must be filled, on the deal or in `fields`, or the move is refused naming them.\n\nNeeds the `deals:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The deal’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealMove"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused` or `stage_requirements_missing`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"deals:write"}},"/deals/search":{"post":{"operationId":"search_deals","tags":["Deals"],"summary":"Search deals","description":"Deals matching every filter, oldest first unless you `sort` (created_at, updated_at, amount, expected_close_date or closed_at), paged like the list. Searchable: name, pipeline_id, stage, status, amount, currency, expected_close_date, closed_at, close_reason_code, company_name, company_domain, company_id, primary_contact_id, owner_seat_id, source, created_at, updated_at, and custom_fields.<key>.\n\nNeeds the `deals:read` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Search"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealList"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"deals:read"}},"/reports/revenue":{"get":{"operationId":"revenue","tags":["Reports"],"summary":"Revenue report","description":"Won revenue, pipeline and win rate over a period.\n\nNeeds the `reports:read` scope.","parameters":[{"in":"query","required":false,"name":"days","description":"How far back, in days. Default 90.","schema":{"type":"integer","default":90}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueReportResponse"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"reports:read"}},"/documents":{"get":{"operationId":"documents","tags":["Creative"],"summary":"List documents","description":"Your workspace’s documents. `templates=true` lists only team templates, the ones `POST /documents` can start from.\n\nNeeds the `creative:read` scope.","parameters":[{"in":"query","required":false,"name":"templates","description":"Only team templates.","schema":{"type":"boolean"}},{"in":"query","required":false,"name":"q","description":"Titles containing this.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"`{ object: \"list\", data: [{ id, title, kind, template, gaps, updated_at }] }`"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"creative:read"},"post":{"operationId":"create_document","tags":["Creative"],"summary":"Make a document","description":"From a team template with its gaps filled by `fields`, or a new one of a kind. It shows in Documents as “Made with the API · key …”.\n\nNeeds the `creative:write` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"`{ id, title, kind, gaps_left: [\"DATE\"] }`"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"creative:write"}},"/documents/{id}/export":{"post":{"operationId":"export_document","tags":["Creative"],"summary":"Export a document as PDF","description":"Makes the PDF (accessible by default) and keeps it with the workspace’s PDFs. Returns a link to download it, valid for a few hours.\n\nNeeds the `creative:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The document’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentExport"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"`{ mode, pages, bytes, url, warnings, gaps_left }`"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"creative:write"}},"/videos/{id}/edit":{"post":{"operationId":"edit_video","tags":["Creative"],"summary":"Edit a video","description":"Applies the editor’s operations, checked as the editor checks them, and saves a new version, which Workloom renders. A problem comes back as a problem in words; nothing half-applied is saved.\n\nNeeds the `creative:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The video’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VideoEdit"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"`{ id, revision, changes, status: \"rendering\" }`"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"creative:write"}},"/designs":{"post":{"operationId":"create_design","tags":["Creative"],"summary":"Make a design","description":"A blank design of a format or size, with a link to open it in Workloom’s image editor.\n\nNeeds the `creative:write` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DesignCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"`{ id, name, width, height, open_url }`"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"creative:write"}},"/pipelines":{"get":{"operationId":"pipelines","tags":["Workspace"],"summary":"List pipelines and stages","description":"Every pipeline with its stages in board order, and the reasons a deal can be lost, won or parked. Use the stage keys for `stage` and the reason keys for `reason_code`.\n\nNeeds the `deals:read` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","reasons"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Pipeline"}},"reasons":{"$ref":"#/components/schemas/Reasons"}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"deals:read"}},"/seats":{"get":{"operationId":"seats","tags":["Workspace"],"summary":"List teammates","description":"Everyone with a seat: teammates, service accounts and people from outside the company. `owner_seat_id` on a record is one of these ids. Emails are shown to a key acting for the workspace or for an admin.\n\nNeeds the `team:read` scope.","parameters":[{"in":"query","required":false,"name":"status","description":"Only seats in this state: active, invited, suspended or ended.","schema":{"type":"string","enum":["active","invited","suspended","ended"]}},{"in":"query","required":false,"name":"limit","description":"How many to return, 1 to 100. Default 25.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"in":"query","required":false,"name":"cursor","description":"The `next_cursor` from the previous page.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeatList"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"team:read"}},"/custom-fields":{"get":{"operationId":"custom_fields","tags":["Workspace"],"summary":"List your own fields","description":"The fields your workspace added in Settings › Data model, with their keys, labels and types. Records carry their values under `custom_fields`. Needs any one of the read scopes.\n\nNeeds one of the `contacts:read`, `companies:read`, `deals:read` scopes.","parameters":[{"in":"query","required":false,"name":"object","description":"contact, company or deal. Omit for all three.","schema":{"type":"string","enum":["contact","company","deal"]}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CustomField"}}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":["contacts:read","companies:read","deals:read"]}},"/contacts/{id}/timeline":{"get":{"operationId":"contact_timeline","tags":["Activity"],"summary":"A contact’s timeline","description":"What happened with a contact, newest first: emails, calls, LinkedIn, meetings, stage moves, finished tasks, website visits, Tells and more.\n\nNeeds the `activity:read` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The contact’s id.","schema":{"type":"string"}},{"in":"query","required":false,"name":"limit","description":"How many, 1 to 200. Default 50.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","unavailable"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TimelineEntry"}},"unavailable":{"type":"array","items":{"type":"string"},"description":"Parts of the history that did not answer this time (for example linkedin). A short timeline and a broken one look the same without this."}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"activity:read"}},"/companies/{id}/timeline":{"get":{"operationId":"company_timeline","tags":["Activity"],"summary":"A company’s timeline","description":"What happened across a company, newest first: its website visits and Tells, and the most active people’s timelines, each entry with its `contact_id`.\n\nNeeds the `activity:read` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The company’s id.","schema":{"type":"string"}},{"in":"query","required":false,"name":"limit","description":"How many, 1 to 200. Default 50.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","unavailable"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TimelineEntry"}},"unavailable":{"type":"array","items":{"type":"string"},"description":"Parts of the history that did not answer this time (for example linkedin). A short timeline and a broken one look the same without this."}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"activity:read"}},"/deals/{id}/timeline":{"get":{"operationId":"deal_timeline","tags":["Activity"],"summary":"A deal’s timeline","description":"A deal’s stage moves, the changes made to it and its notes, newest first.\n\nNeeds the `activity:read` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The deal’s id.","schema":{"type":"string"}},{"in":"query","required":false,"name":"limit","description":"How many, 1 to 200. Default 50.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","unavailable"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TimelineEntry"}},"unavailable":{"type":"array","items":{"type":"string"},"description":"Parts of the history that did not answer this time (for example linkedin). A short timeline and a broken one look the same without this."}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"activity:read"}},"/notes":{"get":{"operationId":"notes","tags":["Activity"],"summary":"List notes on a record","description":"Notes on one contact, company or deal, newest first.\n\nNeeds the `activity:read` scope.","parameters":[{"in":"query","required":true,"name":"record_type","description":"contact, company or deal.","schema":{"type":"string","enum":["contact","company","deal"]}},{"in":"query","required":true,"name":"record_id","description":"The record.","schema":{"type":"string"}},{"in":"query","required":false,"name":"limit","description":"How many to return, 1 to 100. Default 25.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"in":"query","required":false,"name":"cursor","description":"The `next_cursor` from the previous page.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteList"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"activity:read"},"post":{"operationId":"create_note","tags":["Activity"],"summary":"Add a note","description":"Adds a note to a contact, company or deal the key may edit. It shows on the record and its timeline, named as written by the API key.\n\nNeeds the `activity:write` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"activity:write"}},"/tasks":{"get":{"operationId":"tasks","tags":["Activity"],"summary":"List tasks","description":"Tasks in the queues the key reaches, oldest first.\n\nNeeds the `activity:read` scope.","parameters":[{"in":"query","required":false,"name":"status","description":"open (default), done, skipped or all.","schema":{"type":"string","enum":["open","done","skipped","all"]}},{"in":"query","required":false,"name":"contact_id","description":"Only tasks about this contact.","schema":{"type":"string"}},{"in":"query","required":false,"name":"owner_seat_id","description":"Only tasks in this teammate’s queue.","schema":{"type":"string"}},{"in":"query","required":false,"name":"due_before","description":"Only tasks due before this time (ISO 8601).","schema":{"type":"string","format":"date-time"}},{"in":"query","required":false,"name":"limit","description":"How many to return, 1 to 100. Default 25.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"in":"query","required":false,"name":"cursor","description":"The `next_cursor` from the previous page.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskList"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"activity:read"},"post":{"operationId":"create_task","tags":["Activity"],"summary":"Add a task","description":"Puts a callback, follow-up or task of your own into someone’s queue: the owner you name, else the contact’s owner, else the person the key acts for.\n\nNeeds the `activity:write` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"activity:write"}},"/tasks/{id}":{"get":{"operationId":"task","tags":["Activity"],"summary":"Get a task","description":"Needs the `activity:read` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The task’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskResponse"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"activity:read"},"patch":{"operationId":"update_task","tags":["Activity"],"summary":"Finish or reschedule a task","description":"Marks a task done or skipped, reopens it, or moves its due time. A step of a weave or a shuttle (`from_outreach: true`) is finished in Workloom, where its outcome is chosen, and answers `conflict` here.\n\nNeeds the `activity:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The task’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"activity:write"}},"/lists":{"get":{"operationId":"lists","tags":["Lists"],"summary":"List lists","description":"Lists the key reaches: every list for a workspace key; for a key acting for one person, theirs and those shared with them.\n\nNeeds the `lists:read` scope.","parameters":[{"in":"query","required":false,"name":"limit","description":"How many to return, 1 to 100. Default 25.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"in":"query","required":false,"name":"cursor","description":"The `next_cursor` from the previous page.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListList"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"lists:read"}},"/lists/{id}":{"get":{"operationId":"list","tags":["Lists"],"summary":"Get a list","description":"Needs the `lists:read` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The list’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListResponse"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"lists:read"}},"/lists/{id}/members":{"get":{"operationId":"list_members","tags":["Lists"],"summary":"List who is in a list","description":"The contacts in a list, oldest first, as contact objects. A smart list’s members are worked out from its filter when you ask.\n\nNeeds the `lists:read` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The list’s id.","schema":{"type":"string"}},{"in":"query","required":false,"name":"limit","description":"How many to return, 1 to 100. Default 25.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"in":"query","required":false,"name":"cursor","description":"The `next_cursor` from the previous page.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactList"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"lists:read"},"post":{"operationId":"add_list_members","tags":["Lists"],"summary":"Add contacts to a list","description":"Adds contacts to a static list the key owns, honouring the list’s rules (one per company, email required…). Every contact not added is listed with why.\n\nNeeds the `lists:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The list’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMembers"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"added":{"type":"integer"},"already_in":{"type":"integer"},"skipped":{"type":"array","items":{"type":"object","properties":{"contact_id":{"type":"string"},"reason":{"type":"string"}}}},"not_found":{"type":"array","items":{"type":"string"}}}},"livemode":{"type":"boolean"}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"lists:write"}},"/lists/{id}/members/remove":{"post":{"operationId":"remove_list_members","tags":["Lists"],"summary":"Take contacts out of a list","description":"Removes contacts from a static list the key owns.\n\nNeeds the `lists:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The list’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMembers"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"removed":{"type":"integer"},"not_in_list":{"type":"integer"}}},"livemode":{"type":"boolean"}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"lists:write"}},"/outreach":{"get":{"operationId":"outreach_targets","tags":["Outreach"],"summary":"List what can take people","description":"Live weaves, and active sequences in active shuttles, that the key can enrol contacts into.\n\nNeeds the `outreach:write` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"weaves":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"priority":{"type":["integer","null"]},"starts_with":{"type":["string","null"]}}}},"sequences":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"shuttle_name":{"type":["string","null"]},"steps":{"type":"integer"}}}}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"outreach:write"}},"/weaves/{id}/enrol":{"post":{"operationId":"enrol_weave","tags":["Outreach"],"summary":"Put contacts into a weave","description":"Starts contacts in a live weave, under the weave’s own rules: its priority, whether it takes people twice, and the contact limits. Contacts on the do-not-contact list, erased or on hold are refused. Each refusal says why. A weave step that spends credits charges them as it runs, as in Workloom.\n\nNeeds the `outreach:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The weave’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Enrol"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"started":{"type":"integer"},"refused":{"type":"array","items":{"type":"object","properties":{"contact_id":{"type":"string"},"reason":{"type":"string"}}}},"not_found":{"type":"array","items":{"type":"string"}}}},"livemode":{"type":"boolean"}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"outreach:write"}},"/sequences/{id}/enrol":{"post":{"operationId":"enrol_sequence","tags":["Outreach"],"summary":"Put contacts into a sequence","description":"Enrols contacts in an active sequence: one credit each, from the person the key acts for, or for a workspace key from the contact’s owner, else the sequence’s owner. A key acting for someone other than an admin enrols only their own contacts. Contacts already in it, on the do-not-contact list, erased or on hold are refused, with why.\n\nNeeds the `outreach:write` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The sequence’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Enrol"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"enrolled":{"type":"integer"},"credits_used":{"type":"integer"},"refused":{"type":"array","items":{"type":"object","properties":{"contact_id":{"type":"string"},"reason":{"type":"string"}}}},"not_found":{"type":"array","items":{"type":"string"}}}},"livemode":{"type":"boolean"}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"outreach:write"}},"/sandbox/events":{"post":{"operationId":"sandbox_event","tags":["Webhook endpoints"],"summary":"Make an event happen (sandbox only)","description":"In a developer sandbox (sandbox-api.useworkloom.com, a `wl_sbx_` key) only: records an event nobody can cause through the API (a reply, an open, a click, a bounce, a meeting, a booking, a form, a call, a Tell, an unsubscribe) about one of your sandbox contacts, and every endpoint subscribed to it gets the delivery, signed and retried as always. The live API answers `sandbox_only`.\n\nNeeds the `webhooks:manage` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandboxEvent"}}}},"responses":{"201":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","livemode"],"properties":{"data":{"type":"object","properties":{"type":{"type":"string"},"event_id":{"type":["string","null"]},"contact_id":{"type":"string"}}},"livemode":{"type":"boolean"}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"webhooks:manage"}},"/webhooks":{"get":{"operationId":"webhook_endpoints","tags":["Webhook endpoints"],"summary":"List webhook endpoints","description":"Needs the `webhooks:manage` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"webhooks:manage"},"post":{"operationId":"create_webhook_endpoint","tags":["Webhook endpoints"],"summary":"Add a webhook endpoint","description":"Adds an endpoint. The answer carries its signing `secret`, the only time it is sent unasked. The address must be HTTPS on the public internet.\n\nNeeds the `webhooks:manage` scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}},{"in":"header","name":"Idempotency-Key","required":false,"description":"Any unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with `Idempotent-Replayed: true`. Kept 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"`idempotency_key_reused`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"webhooks:manage"}},"/webhooks/{id}":{"get":{"operationId":"webhook_endpoint","tags":["Webhook endpoints"],"summary":"Get a webhook endpoint","description":"Needs the `webhooks:manage` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The endpoint’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointResponse"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"webhooks:manage"},"patch":{"operationId":"update_webhook_endpoint","tags":["Webhook endpoints"],"summary":"Change a webhook endpoint","description":"Needs the `webhooks:manage` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The endpoint’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"webhooks:manage"},"delete":{"operationId":"delete_webhook_endpoint","tags":["Webhook endpoints"],"summary":"Delete a webhook endpoint","description":"Needs the `webhooks:manage` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The endpoint’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"webhooks:manage"}},"/webhooks/{id}/rotate-secret":{"post":{"operationId":"rotate_webhook_secret","tags":["Webhook endpoints"],"summary":"Rotate an endpoint’s secret","description":"Makes a new signing secret and returns it. The old one stops at once, so update your server first or accept both for a moment.\n\nNeeds the `webhooks:manage` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The endpoint’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointWritten"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"webhooks:manage"}},"/webhooks/{id}/secret":{"get":{"operationId":"webhook_secret","tags":["Webhook endpoints"],"summary":"Show an endpoint’s secret","description":"Needs the `webhooks:manage` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The endpoint’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"secret":{"type":"string"}}}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"webhooks:manage"}},"/webhooks/{id}/test":{"post":{"operationId":"test_webhook_endpoint","tags":["Webhook endpoints"],"summary":"Send a test event","description":"Sends `webhook.test` now, signed like any event, and answers with what your server answered.\n\nNeeds the `webhooks:manage` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The endpoint’s id.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"sent":{"type":"boolean"},"ok":{"type":["boolean","null"]},"status_code":{"type":["integer","null"]},"error":{"type":["string","null"]}}},"livemode":{"type":"boolean"}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"webhooks:manage"}},"/webhooks/{id}/deliveries":{"get":{"operationId":"webhook_deliveries","tags":["Webhook endpoints"],"summary":"List recent deliveries","description":"The latest attempts to this endpoint, newest first, from the last 30 days.\n\nNeeds the `webhooks:manage` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The endpoint’s id.","schema":{"type":"string"}},{"in":"query","required":false,"name":"limit","description":"How many, 1 to 200. Default 50.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"webhooks:manage"}},"/webhooks/{id}/deliveries/{delivery_id}/resend":{"post":{"operationId":"resend_webhook_delivery","tags":["Webhook endpoints"],"summary":"Send a delivery again","description":"Sends one delivery again now, with the same `id`, reading the event as it is now. A test or an Activity log entry is sent once and cannot be resent.\n\nNeeds the `webhooks:manage` scope.","parameters":[{"in":"path","name":"id","required":true,"description":"The endpoint’s id.","schema":{"type":"string"}},{"in":"path","name":"delivery_id","required":true,"description":"The delivery’s id (whd_…).","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"sent":{"type":"boolean"},"ok":{"type":["boolean","null"]},"status_code":{"type":["integer","null"]},"error":{"type":["string","null"]}}},"livemode":{"type":"boolean"}}}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"`duplicate`, `conflict` or `idempotency_key_in_use`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-workloom-scope":"webhooks:manage"}},"/events":{"get":{"operationId":"events","tags":["Webhooks"],"summary":"List webhook events","description":"Every event a webhook endpoint can subscribe to. Needs no scope.\n\nNeeds a key, and no scope.","parameters":[{"in":"header","name":"Workloom-Version","required":false,"description":"A dated version to answer this request in. Without it, the request is answered in the version your key was made on.","schema":{"type":"string","enum":["2026-10-07"]}}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Requests a minute this key may make.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left this minute.","schema":{"type":"integer"}},"Workloom-Mode":{"description":"`live` or `test`: which kind of key made the request.","schema":{"type":"string","enum":["live","test"]}},"Workloom-Version":{"description":"The dated version this answer is in: the one you sent, or your key’s.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","description":"`{ data: [{ type, group, label, description, opt_in }] }`"}}}},"400":{"description":"`invalid_request`, `unknown_fields`, `reason_required` or `unsupported_version`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`authentication_required` or `invalid_key`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`missing_scope`, `forbidden`, `seat_inactive` or `organisation_inactive`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`. Wait `Retry-After` seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`internal_error`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{"reply.received":{"post":{"operationId":"webhook_reply_received","summary":"Someone replies","description":"A contact wrote back: by email (to a sequence email, once Workloom has read what kind of reply it is), on LinkedIn, or by SMS.","tags":["Conversations"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"reply.received"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","channel","category","sentiment","email_id","message_id"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"channel":{"type":"string","enum":["email","linkedin","sms"],"description":"Where they replied."},"category":{"type":["string","null"],"enum":["interested","meeting","more_info","asking_clarification","not_interested","do_not_contact","unsubscribe","out_of_office","next_quarter","referral","wrong_person","general",null],"description":"What kind of reply Workloom read it as. Email only; null on LinkedIn and SMS."},"sentiment":{"type":["string","null"],"description":"positive, neutral or negative. Email only."},"email_id":{"type":["string","null"],"description":"The email message, as Workloom stores it."},"message_id":{"type":["string","null"],"description":"The LinkedIn message or SMS, as Workloom stores it."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"email.opened":{"post":{"operationId":"webhook_email_opened","summary":"An email is opened","description":"A tracked email was opened. Mail apps and privacy proxies load the tracking image on their own, so one email can send several of these and an open on its own is a weak signal.","tags":["Email"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"email.opened"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","sequence_id","mailbox_id"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"sequence_id":{"type":["string","null"],"description":"The sequence the email was sent from, if any."},"mailbox_id":{"type":["string","null"],"description":"The mailbox that sent it."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"email.clicked":{"post":{"operationId":"webhook_email_clicked","summary":"A link in an email is clicked","description":"A tracked link in an email was clicked.","tags":["Email"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"email.clicked"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","sequence_id","url"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"sequence_id":{"type":["string","null"],"description":"The sequence the email was sent from, if any."},"url":{"type":["string","null"],"description":"The link that was clicked."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"email.bounced":{"post":{"operationId":"webhook_email_bounced","summary":"An email bounces","description":"An email could not be delivered.","tags":["Email"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"email.bounced"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","email_id","bounce_type","sequence_id","mailbox_id"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"email_id":{"type":["string","null"],"description":"The email message, as Workloom stores it."},"bounce_type":{"type":["string","null"],"enum":["hard","soft",null],"description":"hard (the address does not exist) or soft (try again later)."},"sequence_id":{"type":["string","null"],"description":"The sequence the email was sent from, if any."},"mailbox_id":{"type":["string","null"],"description":"The mailbox that sent it."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"meeting.booked":{"post":{"operationId":"webhook_meeting_booked","summary":"A meeting is booked","description":"A meeting with a known contact appeared on a connected calendar.","tags":["Meetings"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"meeting.booked"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","meeting_id","title","start_at","provider"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"meeting_id":{"type":["string","null"],"description":"The meeting, as Workloom stores it."},"title":{"type":["string","null"],"description":"The meeting’s title."},"start_at":{"type":["string","null"],"format":"date-time","description":"When it starts."},"provider":{"type":["string","null"],"description":"Where it was booked: google, outlook, calendly…"}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"meeting.moved":{"post":{"operationId":"webhook_meeting_moved","summary":"A meeting is moved","description":"A booked meeting moved to another time. `start_at` is the new time.","tags":["Meetings"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"meeting.moved"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","meeting_id","title","start_at","provider"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"meeting_id":{"type":["string","null"],"description":"The meeting, as Workloom stores it."},"title":{"type":["string","null"],"description":"The meeting’s title."},"start_at":{"type":["string","null"],"format":"date-time","description":"When it starts."},"provider":{"type":["string","null"],"description":"Where it was booked: google, outlook, calendly…"}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"meeting.cancelled":{"post":{"operationId":"webhook_meeting_cancelled","summary":"A meeting is cancelled","description":"A booked meeting was cancelled.","tags":["Meetings"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"meeting.cancelled"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","meeting_id","title","start_at","provider"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"meeting_id":{"type":["string","null"],"description":"The meeting, as Workloom stores it."},"title":{"type":["string","null"],"description":"The meeting’s title."},"start_at":{"type":["string","null"],"format":"date-time","description":"When it starts."},"provider":{"type":["string","null"],"description":"Where it was booked: google, outlook, calendly…"}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"meeting.held":{"post":{"operationId":"webhook_meeting_held","summary":"A meeting happens","description":"A meeting took place: a connected call or a meeting note in its window, or its owner said so.","tags":["Meetings"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"meeting.held"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","meeting_id","title","start_at","provider"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"meeting_id":{"type":["string","null"],"description":"The meeting, as Workloom stores it."},"title":{"type":["string","null"],"description":"The meeting’s title."},"start_at":{"type":["string","null"],"format":"date-time","description":"When it starts."},"provider":{"type":["string","null"],"description":"Where it was booked: google, outlook, calendly…"}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"meeting.no_show":{"post":{"operationId":"webhook_meeting_no_show","summary":"A no-show","description":"The meeting’s owner said the contact did not join.","tags":["Meetings"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"meeting.no_show"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","meeting_id","title","start_at","provider"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"meeting_id":{"type":["string","null"],"description":"The meeting, as Workloom stores it."},"title":{"type":["string","null"],"description":"The meeting’s title."},"start_at":{"type":["string","null"],"format":"date-time","description":"When it starts."},"provider":{"type":["string","null"],"description":"Where it was booked: google, outlook, calendly…"}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"booking.made":{"post":{"operationId":"webhook_booking_made","summary":"Someone books through your booking page","description":"A visitor booked through a Workloom booking page. The same booking usually also sends meeting.booked once it reaches the calendar.","tags":["Website"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"booking.made"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","booking_page_id","page_url"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"booking_page_id":{"type":["string","null"],"description":"The booking page."},"page_url":{"type":["string","null"],"description":"The page they booked from."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"form.submitted":{"post":{"operationId":"webhook_form_submitted","summary":"A form is submitted","description":"A visitor submitted one of your Workloom forms.","tags":["Website"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"form.submitted"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","form_id","page_url","answers"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"form_id":{"type":["string","null"],"description":"The form."},"page_url":{"type":["string","null"],"description":"The page the form was on."},"answers":{"type":"object","additionalProperties":true,"description":"What they entered, by field name."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"call.logged":{"post":{"operationId":"webhook_call_logged","summary":"A call ends with an outcome","description":"A teammate finished a call and logged how it went.","tags":["Calls"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"call.logged"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","call_id","direction","outcome","duration_seconds"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"call_id":{"type":["string","null"],"description":"The call."},"direction":{"type":["string","null"],"enum":["outbound","inbound",null],"description":"Who called whom."},"outcome":{"type":["string","null"],"description":"The outcome the teammate picked, for example connected, meeting, no_answer, or one of your own."},"duration_seconds":{"type":["integer","null"],"description":"How long the call lasted."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"call.missed":{"post":{"operationId":"webhook_call_missed","summary":"An inbound call is missed","description":"Someone called one of your numbers and nobody answered.","tags":["Calls"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"call.missed"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","call_id","from","to"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"call_id":{"type":["string","null"],"description":"The call."},"from":{"type":["string","null"],"description":"The number that called, E.164."},"to":{"type":["string","null"],"description":"Your number they called, E.164."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"deal.created":{"post":{"operationId":"webhook_deal_created","summary":"A deal is created","description":"A deal was opened, by a person, an automation, or the API.","tags":["Pipeline"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"deal.created"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["deal_id","deal","stage"],"properties":{"deal_id":{"type":"string","description":"The deal."},"deal":{"$ref":"#/components/schemas/Deal","description":"The deal as it is when the delivery is made (it may have moved on since the event)."},"stage":{"type":"string","description":"The stage it opened in."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"deal.stage_changed":{"post":{"operationId":"webhook_deal_stage_changed","summary":"A deal moves stage","description":"A deal moved between open stages. Won and lost are their own events.","tags":["Pipeline"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"deal.stage_changed"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["deal_id","deal","from_stage","stage"],"properties":{"deal_id":{"type":"string","description":"The deal."},"deal":{"$ref":"#/components/schemas/Deal","description":"The deal as it is when the delivery is made (it may have moved on since the event)."},"from_stage":{"type":["string","null"],"description":"The stage it left."},"stage":{"type":"string","description":"The stage it moved to."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"deal.won":{"post":{"operationId":"webhook_deal_won","summary":"A deal is won","description":"A deal moved to a won stage.","tags":["Pipeline"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"deal.won"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["deal_id","deal","from_stage","stage"],"properties":{"deal_id":{"type":"string","description":"The deal."},"deal":{"$ref":"#/components/schemas/Deal","description":"The deal as it is when the delivery is made (it may have moved on since the event)."},"from_stage":{"type":["string","null"],"description":"The stage it left."},"stage":{"type":["string","null"],"description":"The stage it is in now."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"deal.lost":{"post":{"operationId":"webhook_deal_lost","summary":"A deal is lost","description":"A deal moved to a lost stage. `deal.close_reason_code` says why.","tags":["Pipeline"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"deal.lost"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["deal_id","deal","from_stage","stage"],"properties":{"deal_id":{"type":"string","description":"The deal."},"deal":{"$ref":"#/components/schemas/Deal","description":"The deal as it is when the delivery is made (it may have moved on since the event)."},"from_stage":{"type":["string","null"],"description":"The stage it left."},"stage":{"type":["string","null"],"description":"The stage it is in now."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"deal.parked":{"post":{"operationId":"webhook_deal_parked","summary":"A deal is parked","description":"A deal was taken off the board until a date.","tags":["Pipeline"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"deal.parked"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["deal_id","deal","from_stage","stage"],"properties":{"deal_id":{"type":"string","description":"The deal."},"deal":{"$ref":"#/components/schemas/Deal","description":"The deal as it is when the delivery is made (it may have moved on since the event)."},"from_stage":{"type":["string","null"],"description":"The stage it left."},"stage":{"type":["string","null"],"description":"The stage it is in now."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"deal.returned":{"post":{"operationId":"webhook_deal_returned","summary":"A parked deal is back","description":"A parked deal came back to the board.","tags":["Pipeline"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"deal.returned"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["deal_id","deal","from_stage","stage"],"properties":{"deal_id":{"type":"string","description":"The deal."},"deal":{"$ref":"#/components/schemas/Deal","description":"The deal as it is when the delivery is made (it may have moved on since the event)."},"from_stage":{"type":["string","null"],"description":"The stage it left."},"stage":{"type":["string","null"],"description":"The stage it is in now."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"deal.amount_changed":{"post":{"operationId":"webhook_deal_amount_changed","summary":"A deal’s amount changes","description":"A deal’s amount changes.","tags":["Pipeline"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"deal.amount_changed"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["deal_id","from","to","direction"],"properties":{"deal_id":{"type":"string","description":"The deal."},"from":{"type":["number","string","null"],"description":"The value before."},"to":{"type":["number","string","null"],"description":"The value now."},"direction":{"type":["string","null"],"description":"Which way it moved: up or down."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"deal.close_date_changed":{"post":{"operationId":"webhook_deal_close_date_changed","summary":"A deal’s close date changes","description":"A deal’s close date changes.","tags":["Pipeline"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"deal.close_date_changed"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["deal_id","from","to","direction"],"properties":{"deal_id":{"type":"string","description":"The deal."},"from":{"type":["number","string","null"],"description":"The value before."},"to":{"type":["number","string","null"],"description":"The value now."},"direction":{"type":["string","null"],"description":"Which way it moved: earlier or later."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"tell.fired":{"post":{"operationId":"webhook_tell_fired","summary":"A Tell fires","description":"Workloom spotted a buying signal on a contact or their company: a job change, funding, hiring, a pricing page visit…","tags":["Tells"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"tell.fired"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["tell_id","kind","title","contact_id","company_id","on_open_deal"],"properties":{"tell_id":{"type":["string","null"],"description":"The Tell."},"kind":{"type":["string","null"],"description":"job_change, promotion, leadership_change, funding, hiring, news_mention, tech_change, website_change, review_posted, linkedin_post, competitor_mention, email_found or website_visit."},"title":{"type":["string","null"],"description":"What happened, in a line."},"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"company_id":{"type":["string","null"],"description":"The company it is about. Fetch it with GET /companies/{id}."},"on_open_deal":{"type":["boolean","null"],"description":"Whether the contact or company has an open deal."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"contact.created":{"post":{"operationId":"webhook_contact_created","summary":"A contact is added","description":"A new contact was added to the workspace: by hand, an import, a form, Quarry, the API…","tags":["Records"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"contact.created"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","company_id","source"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"company_id":{"type":["string","null"],"description":"The company it is about. Fetch it with GET /companies/{id}."},"source":{"type":["string","null"],"description":"How they were added, for example import, form, quarry, by_hand, api."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"company.created":{"post":{"operationId":"webhook_company_created","summary":"A company is added","description":"A new company was added to the workspace.","tags":["Records"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"company.created"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["company_id","source"],"properties":{"company_id":{"type":["string","null"],"description":"The company it is about. Fetch it with GET /companies/{id}."},"source":{"type":["string","null"],"description":"How it was added."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"record.owner_changed":{"post":{"operationId":"webhook_record_owner_changed","summary":"An owner changes","description":"A contact, company or deal was handed to another teammate.","tags":["Records"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"record.owner_changed"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["record_type","record_id","from_owner_seat_id","to_owner_seat_id"],"properties":{"record_type":{"type":"string","enum":["contact","company","deal"],"description":"What kind of record."},"record_id":{"type":"string","description":"The record."},"from_owner_seat_id":{"type":["string","null"],"description":"Who owned it before. Null when nobody did."},"to_owner_seat_id":{"type":["string","null"],"description":"Who owns it now. Null when nobody does."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"contact.updated":{"post":{"operationId":"webhook_contact_updated","summary":"A contact changes","description":"A field on a contact changed (other than its owner, which has its own event). One delivery per field; the deliveries from one edit share `batch_id`.","tags":["Records"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"contact.updated"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","field","from","to","from_display","to_display","batch_id"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"field":{"type":"string","description":"Which field, by its API name (`title`, `email`, `custom_fields.<key>` for your own)."},"from":{"description":"The value before. Any JSON type."},"to":{"description":"The value now. Any JSON type."},"from_display":{"type":["string","null"],"description":"The value before, in words, where Workloom has words for it."},"to_display":{"type":["string","null"],"description":"The value now, in words."},"batch_id":{"type":["string","null"],"description":"Shared by every field changed in the same edit."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"contact.deleted":{"post":{"operationId":"webhook_contact_deleted","summary":"A contact is deleted","description":"A contact was deleted, in Workloom or over the API. A contact deleted over the API stays on the do-not-contact list.","tags":["Records"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"contact.deleted"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","name"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"name":{"type":["string","null"],"description":"The contact’s name when it was deleted."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"company.updated":{"post":{"operationId":"webhook_company_updated","summary":"A company changes","description":"A field on a company changed (other than its owner, which has its own event). One delivery per field; the deliveries from one edit share `batch_id`.","tags":["Records"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"company.updated"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["company_id","field","from","to","from_display","to_display","batch_id"],"properties":{"company_id":{"type":["string","null"],"description":"The company it is about. Fetch it with GET /companies/{id}."},"field":{"type":"string","description":"Which field, by its API name (`custom_fields.<key>` for your own)."},"from":{"description":"The value before. Any JSON type."},"to":{"description":"The value now. Any JSON type."},"from_display":{"type":["string","null"],"description":"The value before, in words, where Workloom has words for it."},"to_display":{"type":["string","null"],"description":"The value now, in words."},"batch_id":{"type":["string","null"],"description":"Shared by every field changed in the same edit."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"company.deleted":{"post":{"operationId":"webhook_company_deleted","summary":"A company is deleted","description":"A company was deleted.","tags":["Records"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"company.deleted"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["company_id","name"],"properties":{"company_id":{"type":["string","null"],"description":"The company it is about. Fetch it with GET /companies/{id}."},"name":{"type":["string","null"],"description":"The company’s name when it was deleted."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"deal.updated":{"post":{"operationId":"webhook_deal_updated","summary":"A deal changes","description":"A field on a deal changed (other than its stage, amount, close date and owner, which have their own events). One delivery per field; the deliveries from one edit share `batch_id`.","tags":["Records"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"deal.updated"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["deal_id","field","from","to","from_display","to_display","batch_id"],"properties":{"deal_id":{"type":"string","description":"The deal."},"field":{"type":"string","description":"Which field, by its API name (`custom_fields.<key>` for your own)."},"from":{"description":"The value before. Any JSON type."},"to":{"description":"The value now. Any JSON type."},"from_display":{"type":["string","null"],"description":"The value before, in words, where Workloom has words for it."},"to_display":{"type":["string","null"],"description":"The value now, in words."},"batch_id":{"type":["string","null"],"description":"Shared by every field changed in the same edit."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"deal.deleted":{"post":{"operationId":"webhook_deal_deleted","summary":"A deal is deleted","description":"A deal was deleted.","tags":["Records"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"deal.deleted"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["deal_id","name"],"properties":{"deal_id":{"type":"string","description":"The deal."},"name":{"type":["string","null"],"description":"The deal’s name when it was deleted."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"contact.unsubscribed":{"post":{"operationId":"webhook_contact_unsubscribed","summary":"A contact opts out","description":"A contact was opted out of every channel: they asked in a reply, a teammate marked them, a weave suppressed them, or they were deleted over the API.","tags":["Conversations"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"contact.unsubscribed"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","source","channels"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"source":{"type":["string","null"],"description":"reply, weave, person_360 (a teammate on the record), work_session, api… Open-ended."},"channels":{"type":"array","items":{"type":"string"},"description":"The channels they are opted out of."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"email.sent":{"post":{"operationId":"webhook_email_sent","summary":"An email is sent","description":"An email left one of your mailboxes: a sequence step, a weave, a teammate’s reply or a send from the inbox. `contact_id` is the contact with that address, when there is one.","tags":["Email"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"email.sent"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["contact_id","email_id","mailbox_id","to","subject","message_id"],"properties":{"contact_id":{"type":["string","null"],"description":"The contact it is about. Fetch it with GET /contacts/{id}."},"email_id":{"type":["string","null"],"description":"The email message, as Workloom stores it."},"mailbox_id":{"type":["string","null"],"description":"The mailbox that sent it."},"to":{"type":["string","null"],"description":"The address it went to."},"subject":{"type":["string","null"],"description":"Its subject line."},"message_id":{"type":["string","null"],"description":"The message id the mail provider gave it."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"activity_log.event":{"post":{"operationId":"webhook_activity_log_event","summary":"Activity log","description":"Every entry in your Activity log (Settings › Security), as a sentence and as data. Includes sign-ins with the device and a masked address, so it is never part of `*`: choose it by name.\n\nNot part of `*`: subscribe to it by name.","tags":["Activity log"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"activity_log.event"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["id","text","action","category","source","actor","subject","changes","details"],"properties":{"id":{"type":"string","description":"The Activity log entry."},"text":{"type":"string","description":"The entry as a sentence, for example \"Asha moved Northwind to Proposal\"."},"action":{"type":"string","description":"What happened, for example deal.stage_moved, seat.invited, auth.signed_in."},"category":{"type":["string","null"],"description":"pipeline, records, rules, outreach, team, security, credits, sync or settings."},"source":{"type":["string","null"],"description":"Where in Workloom it happened."},"actor":{"type":"object","description":"`{ kind, name }`. kind is person, wren, rule, integration or system."},"subject":{"type":["object","null"],"description":"`{ type, id, name }` of the record it is about."},"changes":{"type":"array","items":{"type":"object"},"description":"Each changed field, `{ field, from, to }`."},"details":{"type":"object","additionalProperties":true,"description":"Anything else the entry records."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}},"webhook.test":{"post":{"operationId":"webhook_webhook_test","summary":"A test delivery","description":"Sent only by \"Send a test\" in Settings › API and webhooks, never on its own.","tags":["Testing"],"parameters":[{"in":"header","name":"X-Workloom-Signature","required":true,"description":"`t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your endpoint’s secret>`. Reject a delivery whose `t` is more than 300 seconds from now.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Event","required":true,"description":"The event type, the same as `type` in the body.","schema":{"type":"string"}},{"in":"header","name":"X-Workloom-Delivery","required":true,"description":"The delivery id, the same as `id` in the body, and the same on every retry of it.","schema":{"type":"string"}},{"in":"header","name":"Workloom-Version","required":true,"description":"The dated version the body is shaped in: the endpoint’s, the same as `workloom_version` in the body.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id","event_id","type","api_version","workloom_version","livemode","created_at","occurred_at","data"],"properties":{"id":{"type":"string","description":"This delivery. The same on every retry: ignore an id you have already handled."},"event_id":{"type":["string","null"],"description":"The event. The same for every endpoint that receives it."},"type":{"type":"string","const":"webhook.test"},"api_version":{"type":"string","const":"v1"},"workloom_version":{"type":"string","description":"The dated version this body is shaped in: the endpoint’s."},"livemode":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","description":"When this delivery was made."},"occurred_at":{"type":"string","format":"date-time","description":"When the event happened."},"data":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"A sentence saying the endpoint works."}}}}}}}},"responses":{"2XX":{"description":"Received. Answer within 10 seconds; do the work afterwards."},"default":{"description":"Anything else, or no answer in 10 seconds, is retried 30 s, 2 min, 10 min, 30 min, 1 h and 3 h later (about 4 h 45 min in all). A 4xx other than 429 is not retried. 20 failed attempts in a row turn the endpoint off."}}}}},"x-workloom-versions":{"header":"Workloom-Version","latest":"2026-10-07","first":"2026-10-07","versions":[{"version":"2026-10-07","summary":"The first dated version: the API as it was on 7 October 2026. Every key and endpoint made before then is on it.","changes":[]}]},"x-workloom-scopes":[{"scope":"contacts:read","description":"Read contacts."},{"scope":"contacts:write","description":"Add contacts and change them."},{"scope":"companies:read","description":"Read companies."},{"scope":"companies:write","description":"Add companies and change their owner and tags."},{"scope":"deals:read","description":"Read deals."},{"scope":"deals:write","description":"Create deals, change them and move them between stages."},{"scope":"reports:read","description":"Read the revenue report."},{"scope":"team:read","description":"Read the teammates in the workspace (seats), to resolve owners and assign work."},{"scope":"activity:read","description":"Read timelines and tasks."},{"scope":"activity:write","description":"Add notes, and create, finish and reschedule tasks."},{"scope":"lists:read","description":"Read lists and who is in them."},{"scope":"lists:write","description":"Add people to lists and take them out."},{"scope":"outreach:write","description":"Enrol contacts in live weaves and active sequences. Spends credits, as enrolling in Workloom does."},{"scope":"webhooks:manage","description":"Add, change and remove webhook endpoints, and resend deliveries. A webhook sends every record its events name to an address of your choosing, so give this only to what needs it."},{"scope":"creative:read","description":"Read documents and templates."},{"scope":"creative:write","description":"Make documents from templates, export PDFs, edit videos and make designs, with the checks the app runs."}],"x-workloom-errors":[{"code":"authentication_required","status":401,"description":"No key was sent."},{"code":"invalid_key","status":401,"description":"The key is wrong, revoked or expired. One answer for all three."},{"code":"organisation_inactive","status":403,"description":"The workspace is not active."},{"code":"seat_inactive","status":403,"description":"The person or service account this key acts for is no longer active."},{"code":"missing_scope","status":403,"description":"The key was not given the scope this endpoint needs. `required` and `granted` say which."},{"code":"forbidden","status":403,"description":"The key’s role or reach does not allow this."},{"code":"not_found","status":404,"description":"No such record, or one the key cannot reach. The same answer for both."},{"code":"invalid_request","status":400,"description":"The request is missing something or a value is wrong. `problems` lists each one when there are several."},{"code":"unknown_fields","status":400,"description":"The body has a field this endpoint does not accept. `unknown_fields` and `accepted_fields` say which."},{"code":"reason_required","status":400,"description":"Moving a deal to a lost stage needs `reason_code`."},{"code":"stage_requirements_missing","status":422,"description":"The stage needs fields the deal does not have yet. `missing_fields` lists each `{ key, label }`; send them in `fields`."},{"code":"suppressed","status":409,"description":"The contact was deleted and is on the do-not-contact list, so the same address is not added again."},{"code":"duplicate","status":409,"description":"The record already exists. `duplicates` (contacts, companies) or `deal_id` (deals) points at it when the key can reach it."},{"code":"conflict","status":409,"description":"The record changed in a way that stops this request."},{"code":"idempotency_key_in_use","status":409,"description":"A request with this Idempotency-Key is still running. Retry shortly."},{"code":"idempotency_key_reused","status":422,"description":"This Idempotency-Key was used for a different request."},{"code":"unsupported_version","status":400,"description":"The `Workloom-Version` header names no version. `versions` lists the ones there are."},{"code":"sandbox_only","status":404,"description":"This endpoint works in a developer sandbox only: sandbox-api.useworkloom.com, with a `wl_sbx_` key."},{"code":"sandbox_key","status":401,"description":"A developer sandbox key (`wl_sbx_`) was sent to the live API. Send it to sandbox-api.useworkloom.com."},{"code":"rate_limited","status":429,"description":"More requests a minute than the key is allowed. Wait `Retry-After` seconds."},{"code":"internal_error","status":500,"description":"Something failed on our side. Safe to retry with the same Idempotency-Key."}],"x-workloom-limits":{"requests_per_window":300,"window_seconds":60,"max_page_size":100,"default_page_size":25,"idempotency_hours":24,"key_prefixes":{"live":"wl_live_","test":"wl_test_"}},"x-workloom-webhooks":{"signature_header":"X-Workloom-Signature","event_header":"X-Workloom-Event","delivery_header":"X-Workloom-Delivery","user_agent":"Workloom-Webhooks/1","tolerance_seconds":300,"timeout_seconds":10,"retry_after_seconds":[30,120,600,1800,3600,10800],"disable_after_failures":20,"delivery_log_days":30,"secret_prefix":"whsec_"},"components":{"schemas":{"Contact":{"type":"object","description":"A person in your workspace.","properties":{"id":{"type":"string","description":"The contact’s id.","example":"66f1c0ffee0000000000abcd"},"first_name":{"type":["string","null"],"description":"First name.","example":"Ada"},"last_name":{"type":["string","null"],"description":"Last name.","example":"Lovelace"},"full_name":{"type":["string","null"],"description":"The name as one string.","example":"Ada Lovelace"},"email":{"type":["string","null"],"description":"Work email.","example":"ada@northwind.example"},"phone":{"type":["string","null"],"description":"Phone number, as entered."},"title":{"type":["string","null"],"description":"Job title.","example":"Head of Operations"},"company_name":{"type":["string","null"],"description":"Where they work.","example":"Northwind"},"company_domain":{"type":["string","null"],"description":"Their company’s website domain.","example":"northwind.example"},"company_id":{"type":["string","null"],"description":"The company record they belong to, if any.","example":"66f1c0ffee0000000000abcd"},"linkedin_url":{"type":["string","null"],"description":"LinkedIn profile address."},"location":{"type":["object","null"],"description":"Where they are, as far as we know.","properties":{"city":{"type":["string","null"]},"state":{"type":["string","null"]},"country":{"type":["string","null"]}}},"owner_seat_id":{"type":["string","null"],"description":"The teammate who owns this contact. Null when nobody does.","example":"66f1c0ffee0000000000abcd"},"tags":{"type":"array","items":{"type":"string"},"description":"Tags on the contact."},"custom_fields":{"type":"object","additionalProperties":true,"description":"Your own fields (Settings › Data model), by key. `GET /custom-fields` lists their keys, labels and types. A field with no value is left out."},"created_at":{"type":"string","format":"date-time","description":"When the contact was added."},"updated_at":{"type":"string","format":"date-time","description":"When the contact last changed."}},"required":["id","first_name","last_name","full_name","email","phone","title","company_name","company_domain","company_id","linkedin_url","location","owner_seat_id","tags","custom_fields","created_at","updated_at"]},"ContactResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Contact"}}},"ContactList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"ContactWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/Contact"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"Company":{"type":"object","description":"A company in your workspace.","properties":{"id":{"type":"string","description":"The company’s id.","example":"66f1c0ffee0000000000abcd"},"name":{"type":["string","null"],"description":"Company name.","example":"Northwind"},"domain":{"type":["string","null"],"description":"Website domain.","example":"northwind.example"},"industry":{"type":["string","null"],"description":"Industry.","example":"Logistics"},"employee_count":{"type":["integer","null"],"description":"Number of employees, when known exactly.","example":140},"employee_range":{"type":["string","null"],"description":"Size band, for example \"51-200\".","example":"51-200"},"location":{"type":["object","null"],"description":"Headquarters, as far as we know.","properties":{"city":{"type":["string","null"]},"state":{"type":["string","null"]},"country":{"type":["string","null"]}}},"linkedin_url":{"type":["string","null"],"description":"LinkedIn company page."},"owner_seat_id":{"type":["string","null"],"description":"The teammate who owns this account. Null when nobody does.","example":"66f1c0ffee0000000000abcd"},"tags":{"type":"array","items":{"type":"string"},"description":"Tags on the company."},"custom_fields":{"type":"object","additionalProperties":true,"description":"Your own fields (Settings › Data model), by key. `GET /custom-fields` lists their keys, labels and types. A field with no value is left out."},"created_at":{"type":"string","format":"date-time","description":"When the company was added."},"updated_at":{"type":"string","format":"date-time","description":"When the company last changed."}},"required":["id","name","domain","industry","employee_count","employee_range","location","linkedin_url","owner_seat_id","tags","custom_fields","created_at","updated_at"]},"CompanyResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Company"}}},"CompanyList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Company"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"CompanyWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/Company"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"Deal":{"type":"object","description":"A deal on one of your pipelines.","properties":{"id":{"type":"string","description":"The deal’s id.","example":"66f1c0ffee0000000000abcd"},"name":{"type":"string","description":"Deal name.","example":"Northwind renewal"},"pipeline_id":{"type":"string","description":"Which pipeline it is on. \"default\" unless you have several.","example":"default"},"stage":{"type":"string","description":"The stage key, as your pipeline names it.","example":"proposal"},"status":{"type":"string","enum":["open","won","lost","parked"],"description":"Open, won, lost, or parked (off the board until a date)."},"amount":{"type":["number","null"],"description":"Value of the deal.","example":12000},"currency":{"type":"string","description":"Three-letter currency code.","example":"USD"},"probability":{"type":["integer","null"],"description":"Chance of winning, 0 to 100, from the stage.","example":40},"forecast_category":{"type":"string","enum":["pipeline","best_case","commit","omitted"],"description":"Forecast category, from the stage."},"expected_close_date":{"type":["string","null"],"format":"date-time","description":"When you expect it to close."},"next_step":{"type":["object","null"],"description":"What happens next, and when.","properties":{"text":{"type":"string"},"due_at":{"type":["string","null"],"format":"date-time"}}},"company_name":{"type":["string","null"],"description":"The account’s name.","example":"Northwind"},"company_domain":{"type":["string","null"],"description":"The account’s website domain.","example":"northwind.example"},"company_id":{"type":["string","null"],"description":"The company record, if any.","example":"66f1c0ffee0000000000abcd"},"primary_contact_id":{"type":["string","null"],"description":"The main contact on the deal.","example":"66f1c0ffee0000000000abcd"},"contacts":{"type":"array","description":"Everyone on the deal, with their role.","items":{"type":"object","properties":{"contact_id":{"type":"string"},"role":{"type":"string","example":"champion"}}}},"closed_at":{"type":["string","null"],"format":"date-time","description":"When it was won or lost."},"close_reason_code":{"type":["string","null"],"description":"Why it was won or lost: one of your reason keys."},"owner_seat_id":{"type":["string","null"],"description":"The teammate who owns the deal. Null when nobody does.","example":"66f1c0ffee0000000000abcd"},"source":{"type":["string","null"],"description":"How it was created, for example \"manual\" or \"api:Warehouse sync\"."},"custom_fields":{"type":"object","additionalProperties":true,"description":"Your own fields (Settings › Data model), by key. `GET /custom-fields` lists their keys, labels and types. A field with no value is left out."},"created_at":{"type":"string","format":"date-time","description":"When the deal was created."},"updated_at":{"type":"string","format":"date-time","description":"When the deal last changed."}},"required":["id","name","pipeline_id","stage","status","amount","currency","probability","forecast_category","expected_close_date","next_step","company_name","company_domain","company_id","primary_contact_id","contacts","closed_at","close_reason_code","owner_seat_id","source","custom_fields","created_at","updated_at"]},"DealResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Deal"}}},"DealList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Deal"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"DealWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/Deal"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"Pipeline":{"type":"object","description":"A pipeline and its stages, in board order.","properties":{"id":{"type":"string","description":"The pipeline key. Deals carry it as `pipeline_id`.","example":"default"},"name":{"type":"string","description":"Its name.","example":"New business"},"is_default":{"type":"boolean","description":"Whether deals land here unless told otherwise."},"stages":{"type":"array","description":"Every stage, in order. `key` is what deals carry as `stage` and what the move endpoint takes.","items":{"$ref":"#/components/schemas/Stage"}}},"required":["id","name","is_default","stages"]},"PipelineResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Pipeline"}}},"PipelineList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Pipeline"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"PipelineWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/Pipeline"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"Seat":{"type":"object","description":"A teammate: someone (or a service account) with a seat in the workspace. Records name their owner by seat id.","properties":{"id":{"type":"string","description":"The seat id. Records carry it as `owner_seat_id`.","example":"66f1c0ffee0000000000abcd"},"name":{"type":["string","null"],"description":"Their name.","example":"Asha Rao"},"email":{"type":["string","null"],"description":"Their sign-in email. Null for a service account, and for a key acting for someone other than an admin.","example":"asha@quellbrook.example"},"kind":{"type":"string","enum":["member","service","external","operator"],"description":"member is a teammate; service a service account; external someone from outside the company."},"role":{"type":["string","null"],"description":"Their role in words, for example Admin, Manager or Rep.","example":"Rep"},"status":{"type":"string","enum":["active","invited","suspended","ended"],"description":"Only an active seat can own records."},"team_id":{"type":["string","null"],"description":"Their team, if any.","example":"66f1c0ffee0000000000abcd"}},"required":["id","name","email","kind","role","status","team_id"]},"SeatResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Seat"}}},"SeatList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Seat"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"SeatWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/Seat"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"CustomField":{"type":"object","description":"One of your own fields (Settings › Data model).","properties":{"key":{"type":"string","description":"The key. Values sit under `custom_fields.<key>`.","example":"region"},"label":{"type":"string","description":"Its name in Workloom.","example":"Region"},"object":{"type":"string","enum":["contact","company","deal"],"description":"Which kind of record it belongs to."},"type":{"type":"string","description":"text, textarea, number, currency, date, boolean, select, multiselect, url, email, user, relation or formula.","example":"select"},"options":{"type":"array","items":{"type":"string"},"description":"The choices, for select and multiselect."},"read_only":{"type":"boolean","description":"True for formula fields and archived fields: they cannot be written."}},"required":["key","label","object","type","options","read_only"]},"CustomFieldResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/CustomField"}}},"CustomFieldList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CustomField"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"CustomFieldWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/CustomField"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"TimelineEntry":{"type":"object","description":"One thing that happened, on a contact’s, company’s or deal’s timeline.","properties":{"at":{"type":"string","format":"date-time","description":"When it happened."},"kind":{"type":"string","description":"What it was: email, call, linkedin, meeting, stage, task, note, tell, visit, form, change…","example":"email"},"channel":{"type":["string","null"],"description":"email, call, linkedin, sms, web or null."},"direction":{"type":["string","null"],"description":"inbound or outbound, where it applies."},"title":{"type":["string","null"],"description":"A line saying what happened.","example":"Re: pricing for 10 seats"},"detail":{"type":["string","null"],"description":"More, when there is more."},"contact_id":{"type":["string","null"],"description":"The contact it was with, on a company’s or deal’s timeline.","example":"66f1c0ffee0000000000abcd"},"ref":{"type":["object","null"],"description":"What it points at in Workloom: `{ type, id }`, for example an email or a call.","properties":{"type":{"type":"string"},"id":{"type":"string"}}}},"required":["at","kind","channel","direction","title","detail","contact_id","ref"]},"TimelineEntryResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/TimelineEntry"}}},"TimelineEntryList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TimelineEntry"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"TimelineEntryWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/TimelineEntry"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"Note":{"type":"object","description":"A note on a contact, a company or a deal.","properties":{"id":{"type":"string","description":"The note’s id.","example":"66f1c0ffee0000000000abcd"},"record_type":{"type":"string","enum":["contact","company","deal"],"description":"What it is on."},"record_id":{"type":"string","description":"The record it is on.","example":"66f1c0ffee0000000000abcd"},"body":{"type":"string","description":"What it says. Markdown.","example":"Asked for the security pack."},"pinned":{"type":"boolean","description":"Pinned to the top of the record."},"author_seat_id":{"type":["string","null"],"description":"Who wrote it. Null when an API key acting for the workspace did.","example":"66f1c0ffee0000000000abcd"},"source":{"type":["string","null"],"description":"Where it was written, for example manual or api."},"created_at":{"type":"string","format":"date-time","description":"When it was written."}},"required":["id","record_type","record_id","body","pinned","author_seat_id","source","created_at"]},"NoteResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Note"}}},"NoteList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Note"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"NoteWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/Note"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"Task":{"type":"object","description":"A task in someone’s queue: a callback, a follow-up or one of your own task types.","properties":{"id":{"type":"string","description":"The task’s id.","example":"66f1c0ffee0000000000abcd"},"type":{"type":"string","description":"callback, follow_up, custom, call, email_task, linkedin… Tasks made over the API are callback, follow_up or custom.","example":"follow_up"},"title":{"type":["string","null"],"description":"What to do.","example":"Send the security pack"},"instructions":{"type":["string","null"],"description":"Notes for whoever does it."},"status":{"type":"string","enum":["open","done","skipped"],"description":"Open until done or skipped."},"due_at":{"type":["string","null"],"format":"date-time","description":"When it is due."},"contact_id":{"type":["string","null"],"description":"Who it is about.","example":"66f1c0ffee0000000000abcd"},"owner_seat_id":{"type":["string","null"],"description":"Whose queue it is in.","example":"66f1c0ffee0000000000abcd"},"source":{"type":["string","null"],"description":"What made it: manual, api, weave, campaign…"},"from_outreach":{"type":"boolean","description":"True when a weave or a shuttle step made it. Those are finished in Workloom, where the step’s outcome is chosen."},"completed_at":{"type":["string","null"],"format":"date-time","description":"When it was finished."},"created_at":{"type":"string","format":"date-time","description":"When it was made."}},"required":["id","type","title","instructions","status","due_at","contact_id","owner_seat_id","source","from_outreach","completed_at","created_at"]},"TaskResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Task"}}},"TaskList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Task"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"TaskWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/Task"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"List":{"type":"object","description":"A list of contacts.","properties":{"id":{"type":"string","description":"The list’s id.","example":"66f1c0ffee0000000000abcd"},"name":{"type":"string","description":"Its name.","example":"Series A founders"},"description":{"type":["string","null"],"description":"What it is for."},"kind":{"type":"string","enum":["static","smart"],"description":"static: people are added and removed. smart: its filter decides, so it cannot be added to."},"owner_seat_id":{"type":["string","null"],"description":"Who owns it.","example":"66f1c0ffee0000000000abcd"},"member_count":{"type":["integer","null"],"description":"How many contacts are in it.","example":42},"created_at":{"type":"string","format":"date-time","description":"When it was made."}},"required":["id","name","description","kind","owner_seat_id","member_count","created_at"]},"ListResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/List"}}},"ListList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/List"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"ListWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/List"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"WebhookEndpoint":{"type":"object","description":"An address Workloom sends events to.","properties":{"id":{"type":"string","description":"The endpoint’s id.","example":"66f1c0ffee0000000000abcd"},"name":{"type":"string","description":"Its name.","example":"Revenue alerts"},"url":{"type":"string","description":"Where deliveries go. HTTPS, on the public internet.","example":"https://example.com/hooks/workloom"},"events":{"type":"array","items":{"type":"string"},"description":"The events it gets, or `[\"*\"]` for every event except the Activity log."},"status":{"type":"string","enum":["active","disabled"],"description":"Disabled endpoints get nothing. Workloom disables one after 20 failed attempts in a row."},"disabled_reason":{"type":["string","null"],"description":"Why it was turned off."},"consecutive_failures":{"type":["integer","null"],"description":"Failed attempts since the last success.","example":0},"last_success_at":{"type":["string","null"],"format":"date-time","description":"The last delivery your server accepted."},"last_failure_at":{"type":["string","null"],"format":"date-time","description":"The last failed attempt."},"secret":{"type":["string","null"],"description":"The signing secret. Only on create, rotate and `GET …/secret`; null everywhere else."},"workloom_version":{"type":"string","description":"The dated version its deliveries are shaped in, set when it was added. Change it with `PATCH` to move it to a later one.","example":"2026-10-07"},"created_at":{"type":"string","format":"date-time","description":"When it was added."}},"required":["id","name","url","events","status","disabled_reason","consecutive_failures","last_success_at","last_failure_at","secret","workloom_version","created_at"]},"WebhookEndpointResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/WebhookEndpoint"}}},"WebhookEndpointList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"WebhookEndpointWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/WebhookEndpoint"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"WebhookDelivery":{"type":"object","description":"One attempt to deliver an event to an endpoint.","properties":{"id":{"type":"string","description":"The delivery id, as sent in `X-Workloom-Delivery`. Every attempt at one delivery shares it.","example":"whd_3f1c0d9a2b7e44c1a8d6b5f0"},"event_type":{"type":"string","description":"The event.","example":"deal.won"},"event_id":{"type":["string","null"],"description":"The event, when it can be sent again.","example":"66f1c0ffee0000000000abcd"},"attempt":{"type":["integer","null"],"description":"Which attempt this was, from 1.","example":1},"ok":{"type":"boolean","description":"Whether your server answered with a 2xx."},"status_code":{"type":["integer","null"],"description":"What your server answered. Null when it did not answer.","example":200},"error":{"type":["string","null"],"description":"What went wrong, when something did."},"duration_ms":{"type":["integer","null"],"description":"How long it took.","example":142},"created_at":{"type":"string","format":"date-time","description":"When the attempt was made."}},"required":["id","event_type","event_id","attempt","ok","status_code","error","duration_ms","created_at"]},"WebhookDeliveryResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/WebhookDelivery"}}},"WebhookDeliveryList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"WebhookDeliveryWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/WebhookDelivery"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"RevenueReport":{"type":"object","description":"Won, lost and open deals over a period. Open deals are counted whenever they were created; won, lost and created count only inside the period. A key acting for one person sees only their deals, and no per-rep rows.","properties":{"period":{"type":"object","description":"The window the report covers.","properties":{"days":{"type":"integer"},"since":{"type":"string","format":"date-time"},"until":{"type":"string","format":"date-time"}}},"summary":{"type":"object","description":"Counts and values. `win_rate_pct` is null when nothing closed. `no_amount` counts deals with no amount, which are not in `value`.","properties":{"open":{"$ref":"#/components/schemas/ReportCount"},"won":{"$ref":"#/components/schemas/ReportCount"},"lost":{"$ref":"#/components/schemas/ReportCount"},"created":{"$ref":"#/components/schemas/ReportCount"},"win_rate_pct":{"type":["integer","null"]},"median_cycle_days":{"type":["number","null"]},"average_won_value":{"type":["number","null"]},"currency":{"type":"string"}}},"by_stage":{"type":"array","description":"Open deals per stage, in your pipeline’s order.","items":{"type":"object","properties":{"stage":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer"},"value":{"type":"number"}}}},"by_source":{"type":"array","description":"Where deals came from, and what each source won.","items":{"type":"object","properties":{"source":{"type":"string"},"open":{"type":"integer"},"open_value":{"type":"number"},"won":{"type":"integer"},"won_value":{"type":"number"},"lost":{"type":"integer"},"win_rate_pct":{"type":["integer","null"]}}}},"lost_reasons":{"type":"array","description":"Why deals were lost, counted. \"unrecorded\" when no reason was given.","items":{"type":"object","properties":{"reason":{"type":"string"},"count":{"type":"integer"},"value":{"type":"number"}}}},"by_rep":{"type":"array","description":"Per teammate, with unowned deals as their own row (seat_id null).","items":{"type":"object","properties":{"seat_id":{"type":["string","null"]},"name":{"type":"string"},"open":{"type":"integer"},"open_value":{"type":"number"},"won":{"type":"integer"},"won_value":{"type":"number"},"lost":{"type":"integer"}}}}},"required":["period","summary","by_stage","by_source","lost_reasons","by_rep"]},"RevenueReportResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/RevenueReport"}}},"RevenueReportList":{"type":"object","required":["data","has_more"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RevenueReport"}},"has_more":{"type":"boolean","description":"Whether there is another page."},"next_cursor":{"type":"string","description":"Pass as `cursor` for the next page. Absent on the last page."}}},"RevenueReportWritten":{"type":"object","required":["data","livemode"],"properties":{"data":{"$ref":"#/components/schemas/RevenueReport"},"livemode":{"type":"boolean","description":"False for a test key: nothing was saved, and `data.id` is null on a create."}}},"DealCreate":{"type":"object","description":"A new deal.","properties":{"name":{"type":"string","description":"Deal name. Defaults to the main contact’s company, then their name."},"pipeline_id":{"type":"string","description":"Which pipeline. Defaults to \"default\"."},"stage":{"type":"string","description":"Stage key. Defaults to the pipeline’s first open stage."},"amount":{"type":["number","null"],"description":"Value of the deal."},"currency":{"type":"string","description":"Three-letter currency code. Defaults to USD."},"expected_close_date":{"type":["string","null"],"format":"date-time","description":"When you expect it to close."},"next_step":{"type":["object","string","null"],"description":"What happens next: `{ \"text\": \"Send the proposal\", \"due_at\": \"2026-11-02T10:00:00Z\" }`, or just the text."},"company_name":{"type":["string","null"],"description":"The account’s name."},"company_domain":{"type":["string","null"],"description":"The account’s website domain."},"company_id":{"type":["string","null"],"description":"A company record to open it against.","example":"66f1c0ffee0000000000abcd"},"primary_contact_id":{"type":["string","null"],"description":"The main contact. One open deal per contact per pipeline.","example":"66f1c0ffee0000000000abcd"},"contacts":{"type":"array","description":"Everyone on the deal. Replaces the list.","items":{"type":"object","required":["contact_id"],"properties":{"contact_id":{"type":"string"},"role":{"type":"string","example":"champion"}}}},"owner_seat_id":{"type":["string","null"],"description":"Who owns it. Only a key that acts for the whole workspace may set this.","example":"66f1c0ffee0000000000abcd"},"reason_code":{"type":["string","null"],"description":"Needed when the stage is a lost stage: one of your lost reasons."},"reason_note":{"type":["string","null"],"description":"A note on why it closed."},"fields":{"type":"object","additionalProperties":true,"description":"Your own fields, by key (Settings › Data model). Values are checked against each field’s type."},"custom_fields":{"type":"object","additionalProperties":true,"description":"The same as `fields`, by the name the deal object uses."}},"additionalProperties":false},"DealUpdate":{"type":"object","description":"Changes to a deal. Only what you send changes. To change the stage, use the move endpoint.","properties":{"name":{"type":"string","description":"Deal name."},"amount":{"type":["number","null"],"description":"Value of the deal. Null clears it."},"currency":{"type":"string","description":"Three-letter currency code."},"expected_close_date":{"type":["string","null"],"format":"date-time","description":"When you expect it to close. Null clears it."},"next_step":{"type":["object","string","null"],"description":"What happens next: `{ \"text\": \"Send the proposal\", \"due_at\": \"2026-11-02T10:00:00Z\" }`, or just the text."},"company_name":{"type":["string","null"],"description":"The account’s name."},"company_domain":{"type":["string","null"],"description":"The account’s website domain."},"primary_contact_id":{"type":["string","null"],"description":"The main contact.","example":"66f1c0ffee0000000000abcd"},"contacts":{"type":"array","description":"Everyone on the deal. Replaces the list.","items":{"type":"object","required":["contact_id"],"properties":{"contact_id":{"type":"string"},"role":{"type":"string","example":"champion"}}}},"owner_seat_id":{"type":["string","null"],"description":"Hand the deal to a teammate. Null leaves it unowned.","example":"66f1c0ffee0000000000abcd"},"reason":{"type":["string","null"],"description":"Why it changed owner. Needed when the key’s role does not reach every record."},"fields":{"type":"object","additionalProperties":true,"description":"Your own fields, by key (Settings › Data model). Values are checked against each field’s type."},"custom_fields":{"type":"object","additionalProperties":true,"description":"The same as `fields`, by the name the deal object uses."}},"additionalProperties":false},"DealMove":{"type":"object","description":"Move a deal to another stage, including won and lost.","properties":{"stage":{"type":"string","description":"The stage key to move to."},"reason_code":{"type":["string","null"],"description":"Needed for a lost stage: one of your lost reasons. Optional for won."},"reason_note":{"type":["string","null"],"description":"A note on why."},"competitor":{"type":["string","null"],"description":"Who it was lost to, if anyone."},"fields":{"type":"object","additionalProperties":true,"description":"Values the new stage asks for (its required fields), by key."}},"required":["stage"],"additionalProperties":false},"DocumentCreate":{"type":"object","description":"A document from one of your team templates, or a new one of a kind. `fields` fill its gaps by name: `{ \"FIRST NAME\": \"Priya\", \"COMPANY\": \"Brightline\" }`. Gaps with no value stay, and are listed in `gaps_left`.","properties":{"template_id":{"type":["string","null"],"description":"A team template (a document marked as a template in Workloom).","example":"66f1c0ffee0000000000abcd"},"kind":{"type":"string","enum":["one_pager","case_study","proposal","carousel","workbook","blank"],"description":"The kind, when there is no template."},"title":{"type":["string","null"],"description":"Its title."},"fields":{"type":"object","additionalProperties":{"type":"string"},"description":"Values for its gaps, by name."}},"additionalProperties":false},"DocumentExport":{"type":"object","description":"Export options.","properties":{"mode":{"type":"string","enum":["accessible","plain"],"description":"Accessible (tagged) by default; plain where the document engine is not installed."}},"additionalProperties":false},"VideoEdit":{"type":"object","description":"The video editor’s own operations, checked exactly as the editor checks them. `base_revision` is the version you are changing (a newer one refuses, so two edits never overwrite each other).","properties":{"ops":{"type":"array","items":{"type":"object"},"description":"Operations, for example `{ \"op\": \"cut\", \"from\": 12.5, \"to\": 18 }` or `{ \"op\": \"add_text\", \"at\": 0, \"end\": 3, \"kind\": \"title\", \"text\": \"Your rollout plan\" }`."},"base_revision":{"type":["integer","null"],"description":"The version you are changing."}},"required":["ops","base_revision"],"additionalProperties":false},"DesignCreate":{"type":"object","description":"A blank design, of one of the editor’s formats or a size in pixels, to open in Workloom.","properties":{"format":{"type":["string","null"],"description":"A format id, for example `beam_thumbnail` or `linkedin_post`."},"width":{"type":["integer","null"],"description":"Width in pixels, 16 to 4096."},"height":{"type":["integer","null"],"description":"Height in pixels, 16 to 4096."},"name":{"type":["string","null"],"description":"Its name."}},"additionalProperties":false},"ContactCreate":{"type":"object","description":"A new contact. A contact with the same email or LinkedIn profile is refused; one with the same name at the same company is refused unless you send `force: true`.","properties":{"first_name":{"type":["string","null"],"description":"First name."},"last_name":{"type":["string","null"],"description":"Last name."},"full_name":{"type":["string","null"],"description":"The whole name, when you do not have it split."},"email":{"type":["string","null"],"description":"Work email."},"phone":{"type":["string","null"],"description":"Phone number."},"title":{"type":["string","null"],"description":"Job title."},"company_name":{"type":["string","null"],"description":"Where they work."},"company_id":{"type":["string","null"],"description":"A company record in your workspace.","example":"66f1c0ffee0000000000abcd"},"linkedin_url":{"type":["string","null"],"description":"LinkedIn profile address."},"custom_fields":{"type":"object","additionalProperties":true,"description":"Your own fields by key (`GET /custom-fields`). Each value is checked against its field’s type, and everything is checked before anything is saved."},"force":{"type":"boolean","description":"Add them even though someone with the same name works at the same company."}},"additionalProperties":false},"ContactUpdate":{"type":"object","description":"Changes to a contact. Only what you send changes. Every change is checked before any is saved.","properties":{"full_name":{"type":["string","null"],"description":"The whole name."},"title":{"type":["string","null"],"description":"Job title."},"email":{"type":["string","null"],"description":"Work email."},"phone":{"type":["string","null"],"description":"Phone number."},"company_name":{"type":["string","null"],"description":"Where they work."},"location":{"type":["string","null"],"description":"Where they are, as one line."},"seniority":{"type":"string","enum":["c_level","owner","vp","director","manager","senior","mid","entry"],"description":"Seniority."},"department":{"type":["string","null"],"description":"Department."},"linkedin_url":{"type":["string","null"],"description":"LinkedIn profile address."},"timezone":{"type":["string","null"],"description":"IANA time zone, for example Asia/Kolkata."},"tags":{"type":"array","items":{"type":"string"},"description":"Replaces the tags."},"owner_seat_id":{"type":["string","null"],"description":"Hand the contact to a teammate. Null leaves it unowned.","example":"66f1c0ffee0000000000abcd"},"custom_fields":{"type":"object","additionalProperties":true,"description":"Your own fields by key (`GET /custom-fields`). Each value is checked against its field’s type, and everything is checked before anything is saved."}},"additionalProperties":false},"CompanyCreate":{"type":"object","description":"A new company. One with the same domain is refused; one with the same name is refused unless you send `force: true`.","properties":{"name":{"type":"string","description":"Company name."},"domain":{"type":["string","null"],"description":"Website or domain."},"industry":{"type":["string","null"],"description":"Industry."},"custom_fields":{"type":"object","additionalProperties":true,"description":"Your own fields by key (`GET /custom-fields`). Each value is checked against its field’s type, and everything is checked before anything is saved."},"force":{"type":"boolean","description":"Add it even though a company with the same name exists."}},"required":["name"],"additionalProperties":false},"CompanyUpdate":{"type":"object","description":"Changes to how your workspace holds a company. Firmographics (size, location) come from our data and are not set here.","properties":{"tags":{"type":"array","items":{"type":"string"},"description":"Replaces the tags."},"owner_seat_id":{"type":["string","null"],"description":"Hand the account to a teammate. Null leaves it unowned.","example":"66f1c0ffee0000000000abcd"},"custom_fields":{"type":"object","additionalProperties":true,"description":"Your own fields by key (`GET /custom-fields`). Each value is checked against its field’s type, and everything is checked before anything is saved."}},"additionalProperties":false},"ContactUpsert":{"type":"object","description":"A contact, matched on `email`: changed when it exists, added when it does not. Takes every field of add and update.","properties":{"email":{"type":"string","description":"Work email. The match key, case-insensitive."},"first_name":{"type":["string","null"],"description":"First name. Used when adding."},"last_name":{"type":["string","null"],"description":"Last name. Used when adding."},"full_name":{"type":["string","null"],"description":"The whole name."},"phone":{"type":["string","null"],"description":"Phone number."},"title":{"type":["string","null"],"description":"Job title."},"company_name":{"type":["string","null"],"description":"Where they work."},"company_id":{"type":["string","null"],"description":"A company record in your workspace. Used when adding.","example":"66f1c0ffee0000000000abcd"},"linkedin_url":{"type":["string","null"],"description":"LinkedIn profile address."},"location":{"type":["string","null"],"description":"Where they are, as one line. Used when updating."},"seniority":{"type":"string","enum":["c_level","owner","vp","director","manager","senior","mid","entry"],"description":"Seniority. Used when updating."},"department":{"type":["string","null"],"description":"Department. Used when updating."},"timezone":{"type":["string","null"],"description":"IANA time zone. Used when updating."},"tags":{"type":"array","items":{"type":"string"},"description":"Replaces the tags."},"owner_seat_id":{"type":["string","null"],"description":"Hand the contact to a teammate.","example":"66f1c0ffee0000000000abcd"},"custom_fields":{"type":"object","additionalProperties":true,"description":"Your own fields by key (`GET /custom-fields`). Each value is checked against its field’s type, and everything is checked before anything is saved."}},"required":["email"],"additionalProperties":false},"Search":{"type":"object","description":"Filters, all of which must match.","properties":{"filters":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/SearchFilter"},"description":"Up to 20 filters. All must match."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"How many to return, 1 to 100. Default 25."},"cursor":{"type":["string","null"],"description":"The `next_cursor` from the previous page."},"sort":{"type":["string","null"],"description":"Order by one field, as `sort` on the list: `-` in front for newest or largest first. Keep the same `sort` while you follow `next_cursor`."}},"additionalProperties":false},"SandboxEvent":{"type":"object","description":"An event to make happen in a developer sandbox.","properties":{"type":{"type":"string","enum":["reply.received","email.opened","email.clicked","email.bounced","meeting.booked","meeting.moved","meeting.cancelled","meeting.held","meeting.no_show","booking.made","form.submitted","call.logged","call.missed","tell.fired","contact.unsubscribed"],"description":"Which event. The ones the API can cause itself (contact.created, deal.won…) are made the real way."},"contact_id":{"type":"string","description":"The contact it is about.","example":"66f1c0ffee0000000000abcd"},"category":{"type":["string","null"],"description":"reply.received: what kind of reply (interested, meeting, not_interested…). Default interested."},"url":{"type":["string","null"],"description":"email.clicked, booking.made, form.submitted: the page."},"answers":{"type":"object","additionalProperties":true,"description":"form.submitted: what they entered, by field name."},"outcome":{"type":["string","null"],"description":"call.logged: the outcome. Default connected."},"title":{"type":["string","null"],"description":"meeting.*: the meeting’s title; tell.fired: what happened."},"start_at":{"type":"string","format":"date-time","description":"meeting.*: when it starts. Default two days from now."}},"required":["type","contact_id"],"additionalProperties":false},"NoteCreate":{"type":"object","description":"A note on a record.","properties":{"record_type":{"type":"string","enum":["contact","company","deal"],"description":"What it goes on."},"record_id":{"type":"string","description":"The record.","example":"66f1c0ffee0000000000abcd"},"body":{"type":"string","description":"What it says. Markdown, up to 20,000 characters."},"pinned":{"type":"boolean","description":"Pin it to the top of the record."}},"required":["record_type","record_id","body"],"additionalProperties":false},"TaskCreate":{"type":"object","description":"A task in someone’s queue.","properties":{"type":{"type":"string","enum":["callback","follow_up","custom"],"description":"callback: call them back. follow_up: get back to them. custom: anything else."},"title":{"type":"string","description":"What to do."},"instructions":{"type":["string","null"],"description":"Notes for whoever does it."},"contact_id":{"type":["string","null"],"description":"Who it is about.","example":"66f1c0ffee0000000000abcd"},"due_at":{"type":["string","null"],"format":"date-time","description":"When it is due. Defaults to now."},"owner_seat_id":{"type":["string","null"],"description":"Whose queue it goes in. Defaults to the contact’s owner, then the person the key acts for.","example":"66f1c0ffee0000000000abcd"}},"required":["type","title"],"additionalProperties":false},"TaskUpdate":{"type":"object","description":"Finish, skip, reopen or reschedule a task.","properties":{"status":{"type":"string","enum":["done","skipped","open"],"description":"done or skipped finishes it; open reopens it."},"due_at":{"type":["string","null"],"format":"date-time","description":"A new due time."}},"additionalProperties":false},"ListMembers":{"type":"object","description":"Contacts to add to a list or take out of it.","properties":{"contact_ids":{"type":"array","items":{"type":"string"},"maxItems":500,"description":"The contact ids, up to 500."}},"required":["contact_ids"],"additionalProperties":false},"Enrol":{"type":"object","description":"Contacts to put into a live weave or an active sequence.","properties":{"contact_ids":{"type":"array","items":{"type":"string"},"maxItems":500,"description":"The contact ids, up to 500."}},"required":["contact_ids"],"additionalProperties":false},"WebhookCreate":{"type":"object","description":"A new webhook endpoint.","properties":{"name":{"type":"string","description":"A name you will recognise."},"url":{"type":"string","description":"An HTTPS address on the public internet that accepts POST."},"events":{"type":"array","items":{"type":"string"},"description":"Event types from `GET /events`, or `[\"*\"]` for every event except the Activity log. Defaults to `[\"*\"]`."},"workloom_version":{"type":"string","description":"The dated version to shape its deliveries in. Defaults to the latest."}},"required":["name","url"],"additionalProperties":false},"WebhookUpdate":{"type":"object","description":"Changes to an endpoint. Only what you send changes.","properties":{"name":{"type":"string","description":"A new name."},"url":{"type":"string","description":"A new address."},"events":{"type":"array","items":{"type":"string"},"description":"Replaces the events."},"status":{"type":"string","enum":["active","disabled"],"description":"Turn it off, or back on. Turning it on clears the failure count."},"workloom_version":{"type":"string","description":"Move its deliveries to another dated version."}},"additionalProperties":false},"ReportCount":{"type":"object","properties":{"count":{"type":"integer"},"value":{"type":"number"},"no_amount":{"type":"integer"}}},"Stage":{"type":"object","properties":{"key":{"type":"string","description":"What a deal carries as `stage`."},"label":{"type":"string"},"status":{"type":"string","enum":["open","won","lost"],"description":"Moving a deal to a won or lost stage closes it."},"phase":{"type":["string","null"],"description":"prospecting, opportunity or closed."},"probability":{"type":["integer","null"]},"required_fields":{"type":"array","items":{"type":"string"},"description":"Fields a deal must have to enter this stage (`stage_requirements_missing` otherwise)."}}},"Reasons":{"type":"object","description":"Why deals close or park. `reason_code` takes a key from these.","properties":{"lost":{"type":"array","items":{"$ref":"#/components/schemas/Reason"}},"won":{"type":"array","items":{"$ref":"#/components/schemas/Reason"}},"parked":{"type":"array","items":{"$ref":"#/components/schemas/Reason"}}}},"Reason":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"}}},"Deleted":{"type":"object","required":["data","livemode"],"properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"deleted":{"type":"boolean","const":true}}},"livemode":{"type":"boolean","description":"False for a test key: nothing was deleted."}}},"SearchFilter":{"type":"object","required":["field","op"],"properties":{"field":{"type":"string","description":"A searchable field (listed per endpoint), or `custom_fields.<key>`."},"op":{"type":"string","enum":["eq","neq","in","gt","gte","lt","lte","contains","exists"]},"value":{"description":"What to compare with. A list for `in`; true or false for `exists`."}}},"Error":{"type":"object","required":["error","code"],"description":"Every error. Branch on `code`; show `error` to people. Some codes add details (see each code).","properties":{"error":{"type":"string","description":"What went wrong, in a sentence."},"code":{"type":"string","enum":["authentication_required","invalid_key","organisation_inactive","seat_inactive","missing_scope","forbidden","not_found","invalid_request","unknown_fields","reason_required","stage_requirements_missing","suppressed","duplicate","conflict","idempotency_key_in_use","idempotency_key_reused","unsupported_version","sandbox_only","sandbox_key","rate_limited","internal_error"],"description":"`authentication_required` (401): No key was sent.\n`invalid_key` (401): The key is wrong, revoked or expired. One answer for all three.\n`organisation_inactive` (403): The workspace is not active.\n`seat_inactive` (403): The person or service account this key acts for is no longer active.\n`missing_scope` (403): The key was not given the scope this endpoint needs. `required` and `granted` say which.\n`forbidden` (403): The key’s role or reach does not allow this.\n`not_found` (404): No such record, or one the key cannot reach. The same answer for both.\n`invalid_request` (400): The request is missing something or a value is wrong. `problems` lists each one when there are several.\n`unknown_fields` (400): The body has a field this endpoint does not accept. `unknown_fields` and `accepted_fields` say which.\n`reason_required` (400): Moving a deal to a lost stage needs `reason_code`.\n`stage_requirements_missing` (422): The stage needs fields the deal does not have yet. `missing_fields` lists each `{ key, label }`; send them in `fields`.\n`suppressed` (409): The contact was deleted and is on the do-not-contact list, so the same address is not added again.\n`duplicate` (409): The record already exists. `duplicates` (contacts, companies) or `deal_id` (deals) points at it when the key can reach it.\n`conflict` (409): The record changed in a way that stops this request.\n`idempotency_key_in_use` (409): A request with this Idempotency-Key is still running. Retry shortly.\n`idempotency_key_reused` (422): This Idempotency-Key was used for a different request.\n`unsupported_version` (400): The `Workloom-Version` header names no version. `versions` lists the ones there are.\n`sandbox_only` (404): This endpoint works in a developer sandbox only: sandbox-api.useworkloom.com, with a `wl_sbx_` key.\n`sandbox_key` (401): A developer sandbox key (`wl_sbx_`) was sent to the live API. Send it to sandbox-api.useworkloom.com.\n`rate_limited` (429): More requests a minute than the key is allowed. Wait `Retry-After` seconds.\n`internal_error` (500): Something failed on our side. Safe to retry with the same Idempotency-Key."}},"additionalProperties":true}},"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Authorization: Bearer wl_live_… (or wl_test_…)"},"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}