CATSone
BUSINESS · PEOPLE
Candidates, jobs, activities, attachments, and pipelines in the applicant tracking system they connected.
Acts as the person, not as itself
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Credentials never touch the agent
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Every call on the record
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
catsone_delete_activities_by_idWRITEDelete an activity via DELETE /activities/{id}.
catsone_delete_attachments_by_idWRITEDelete an attachment via DELETE /attachments/{id}.
catsone_delete_candidates_by_candidate_id_emails_by_idWRITEDelete a candidate email via DELETE /candidates/{candidate_id}/emails/{id}.
catsone_delete_candidates_by_candidate_id_phones_by_idWRITEDelete a candidate phone via DELETE /candidates/{candidate_id}/phones/{id}.
catsone_delete_candidates_by_candidate_id_tags_by_tag_idWRITEDelete candidate tag via DELETE /candidates/{candidate_id}/tags/{tag_id}.
catsone_delete_candidates_by_idWRITEDelete a candidate via DELETE /candidates/{id}.
catsone_delete_candidates_lists_by_idWRITEDelete a candidate list via DELETE /candidates/lists/{id}.
catsone_delete_candidates_lists_by_list_id_items_by_item_idWRITEDelete a candidate list item via DELETE /candidates/lists/{list_id}/items/{item_id}.
catsone_delete_candidates_work_history_by_idWRITEDelete a candidate work history item via DELETE /candidates/work_history/{id}.
catsone_delete_companies_by_company_id_phones_by_idWRITEDelete a company phone via DELETE /companies/{company_id}/phones/{id}.
catsone_delete_companies_by_company_id_tags_by_tag_idWRITEDelete company tag via DELETE /companies/{company_id}/tags/{tag_id}.
catsone_delete_companies_by_idWRITEDelete a company via DELETE /companies/{id}.
catsone_delete_companies_departments_by_department_idWRITEDelete department via DELETE /companies/departments/{department_id}.
catsone_delete_companies_lists_by_idWRITEDelete a company list via DELETE /companies/lists/{id}.
catsone_delete_companies_lists_by_list_id_items_by_item_idWRITEDelete a company list item via DELETE /companies/lists/{list_id}/items/{item_id}.
catsone_delete_contacts_by_contact_id_emails_by_idWRITEDelete a contact email via DELETE /contacts/{contact_id}/emails/{id}.
catsone_delete_contacts_by_contact_id_phones_by_idWRITEDelete a contact phone via DELETE /contacts/{contact_id}/phones/{id}.
catsone_delete_contacts_by_contact_id_tags_by_tag_idWRITEDelete contact tag via DELETE /contacts/{contact_id}/tags/{tag_id}.
catsone_delete_contacts_by_idWRITEDelete a contact via DELETE /contacts/{id}.
catsone_delete_contacts_lists_by_idWRITEDelete a contact list via DELETE /contacts/lists/{id}.
catsone_delete_contacts_lists_by_list_id_items_by_item_idWRITEDelete a contact list item via DELETE /contacts/lists/{list_id}/items/{item_id}.
catsone_delete_jobs_by_idWRITEDelete a job via DELETE /jobs/{id}.
catsone_delete_jobs_by_job_id_tags_by_tag_idWRITEDelete job tag via DELETE /jobs/{job_id}/tags/{tag_id}.
catsone_delete_jobs_lists_by_idWRITEDelete a job list via DELETE /jobs/lists/{id}.
catsone_delete_jobs_lists_by_list_id_items_by_item_idWRITEDelete a job list item via DELETE /jobs/lists/{list_id}/items/{item_id}.
catsone_delete_pipelines_by_idWRITEDelete a pipeline via DELETE /pipelines/{id}.
catsone_delete_portals_by_portal_id_jobs_by_job_idWRITEUnpublish portal job via DELETE /portals/{portal_id}/jobs/{job_id}.
catsone_delete_tasks_by_idWRITEDelete a task via DELETE /tasks/{id}.
catsone_delete_webhooks_by_idWRITEDelete a webhook via DELETE /webhooks/{id}.
catsone_delete_work_history_by_work_history_idWRITEHistory delete a work history via DELETE /work_history/{work_history_id}.
catsone_get_activitiesREADList all activities via GET /activities.
catsone_get_activities_by_idREADGet an activity via GET /activities/{id}.
catsone_get_activities_searchREADSearch activities via GET /activities/search.
catsone_get_attachments_by_idREADGet an attachment via GET /attachments/{id}. Returns the attachment's METADATA (id, filename, is_resume, owning data item) as JSON, not its bytes. Agentic Fabriq does not ship the file download: measured 2026-09-24 it answers application/octet-stream, and unbounded bytes cannot enter a tool result.
catsone_get_backupsREADList all backups via GET /backups.
catsone_get_backups_by_idREADGet a backup via GET /backups/{id}.
catsone_get_candidatesREADList all candidates via GET /candidates.
catsone_get_candidates_applications_by_application_idREADGet a candidate application via GET /candidates/applications/{application_id}.
catsone_get_candidates_by_candidate_id_applicationsREADList applications by candidate via GET /candidates/{candidate_id}/applications.
catsone_get_candidates_by_candidate_id_custom_fields_by_custom_field_idREADGet a candidate custom field value via GET /candidates/{candidate_id}/custom_fields/{custom_field_id}.
catsone_get_candidates_by_candidate_id_emailsREADList candidate emails via GET /candidates/{candidate_id}/emails.
catsone_get_candidates_by_candidate_id_emails_by_idREADGet a candidate email via GET /candidates/{candidate_id}/emails/{id}. PROVIDER DEFECT, measured 2026-09-24: a valid candidate with an ABSENT email id answers 500 {"message":"Internal server error."} where a 404 belongs. A valid pair answers 200 normally. So a 500 here means the child id does not exist, not that CATS is down.
catsone_get_candidates_by_candidate_id_phonesREADList candidate phones via GET /candidates/{candidate_id}/phones.
catsone_get_candidates_by_candidate_id_phones_by_idREADGet a candidate phone via GET /candidates/{candidate_id}/phones/{id}. PROVIDER DEFECT, measured 2026-09-24: a valid candidate with an ABSENT phone id answers 500 {"message":"Internal server error."} where a 404 belongs. A valid pair answers 200 normally, and a valid phone id under the WRONG candidate answers a typed 409 "That phone number does not exist on that data item." So a 500 here means the child id does not exist, not that CATS is down.
catsone_get_candidates_by_candidate_id_tagsREADList all candidate tags via GET /candidates/{candidate_id}/tags.
catsone_get_candidates_by_idREADGet a candidate via GET /candidates/{id}.
catsone_get_candidates_by_id_activitiesREADList candidate activities via GET /candidates/{id}/activities.
catsone_get_candidates_by_id_attachmentsREADList a candidate attachments via GET /candidates/{id}/attachments.
catsone_get_candidates_by_id_custom_fieldsREADList candidate custom field values via GET /candidates/{id}/custom_fields.
catsone_get_candidates_by_id_pipelinesREADList pipelines by candidate via GET /candidates/{id}/pipelines.
catsone_get_candidates_by_id_tasksREADList candidate tasks via GET /candidates/{id}/tasks.
catsone_get_candidates_by_id_thumbnailREADGet a candidate thumbnail via GET /candidates/{id}/thumbnail.
catsone_get_candidates_by_id_work_historyREADList candidate work history via GET /candidates/{id}/work_history.
catsone_get_candidates_custom_fieldsREADList candidate custom fields via GET /candidates/custom_fields.
catsone_get_candidates_custom_fields_by_idREADGet a candidate custom field via GET /candidates/custom_fields/{id}.
catsone_get_candidates_listsREADList all candidate lists via GET /candidates/lists.
catsone_get_candidates_lists_by_idREADGet a candidate list via GET /candidates/lists/{id}.
catsone_get_candidates_lists_by_id_itemsREADList all candidate list items via GET /candidates/lists/{id}/items.
catsone_get_candidates_lists_by_list_id_items_by_item_idREADGet a candidate list item via GET /candidates/lists/{list_id}/items/{item_id}.
catsone_get_candidates_searchREADSearch candidates via GET /candidates/search.
catsone_get_candidates_work_history_by_idREADGet a candidate work history item via GET /candidates/work_history/{id}.
catsone_get_companiesREADList all companies via GET /companies.
catsone_get_companies_by_company_id_custom_fields_by_custom_field_idREADGet a company custom field value via GET /companies/{company_id}/custom_fields/{custom_field_id}.
catsone_get_companies_by_company_id_departmentsREADList all departments via GET /companies/{company_id}/departments.
catsone_get_companies_by_company_id_phonesREADList company phones via GET /companies/{company_id}/phones.
catsone_get_companies_by_company_id_phones_by_idREADGet a company phone via GET /companies/{company_id}/phones/{id}.
catsone_get_companies_by_company_id_tagsREADList all company tags via GET /companies/{company_id}/tags.
catsone_get_companies_by_idREADGet a company via GET /companies/{id}.
catsone_get_companies_by_id_attachmentsREADList company attachments via GET /companies/{id}/attachments.
catsone_get_companies_by_id_custom_fieldsREADList company custom field values via GET /companies/{id}/custom_fields.
catsone_get_companies_by_id_tasksREADList company tasks via GET /companies/{id}/tasks.
catsone_get_companies_by_id_thumbnailREADGet a company thumbnail via GET /companies/{id}/thumbnail.
catsone_get_companies_custom_fieldsREADList company custom fields via GET /companies/custom_fields.
catsone_get_companies_custom_fields_by_idREADGet a company custom field via GET /companies/custom_fields/{id}.
catsone_get_companies_departments_by_idREADGet a department via GET /companies/departments/{id}.
catsone_get_companies_listsREADList all company lists via GET /companies/lists.
catsone_get_companies_lists_by_idREADGet a list via GET /companies/lists/{id}.
catsone_get_companies_lists_by_id_itemsREADList all company list items via GET /companies/lists/{id}/items.
catsone_get_companies_lists_by_list_id_items_by_item_idREADGet a company list item via GET /companies/lists/{list_id}/items/{item_id}.
catsone_get_companies_searchREADSearch companies via GET /companies/search.
catsone_get_companies_statusesREADList company statuses via GET /companies/statuses.
catsone_get_companies_statuses_by_idREADGet a company status via GET /companies/statuses/{id}.
catsone_get_contactsREADList all contacts via GET /contacts.
catsone_get_contacts_by_contact_id_custom_fields_by_custom_field_idREADGet a contact custom field value via GET /contacts/{contact_id}/custom_fields/{custom_field_id}.
catsone_get_contacts_by_contact_id_emailsREADList contact emails via GET /contacts/{contact_id}/emails.
catsone_get_contacts_by_contact_id_emails_by_idREADGet a contact email via GET /contacts/{contact_id}/emails/{id}.
catsone_get_contacts_by_contact_id_phonesREADLis contact phones via GET /contacts/{contact_id}/phones.
catsone_get_contacts_by_contact_id_phones_by_idREADGet a contact phone via GET /contacts/{contact_id}/phones/{id}.
catsone_get_contacts_by_contact_id_tagsREADList all contact tags via GET /contacts/{contact_id}/tags.
catsone_get_contacts_by_idREADGet a contact via GET /contacts/{id}.
catsone_get_contacts_by_id_activitiesREADList contact activities via GET /contacts/{id}/activities.
catsone_get_contacts_by_id_attachmentsREADList contact attachments via GET /contacts/{id}/attachments.
catsone_get_contacts_by_id_custom_fieldsREADList contact custom field values via GET /contacts/{id}/custom_fields.
catsone_get_contacts_by_id_tasksREADList contact tasks via GET /contacts/{id}/tasks.
catsone_get_contacts_by_id_thumbnailREADGet a contact thumbnail via GET /contacts/{id}/thumbnail.
catsone_get_contacts_custom_fieldsREADList contact custom fields via GET /contacts/custom_fields.
catsone_get_contacts_custom_fields_by_idREADGet a contact custom field via GET /contacts/custom_fields/{id}.
catsone_get_contacts_listsREADList all contact lists via GET /contacts/lists.
catsone_get_contacts_lists_by_idREADGet a contact list via GET /contacts/lists/{id}.
catsone_get_contacts_lists_by_id_itemsREADList all contact list items via GET /contacts/lists/{id}/items.
catsone_get_contacts_lists_by_list_id_items_by_item_idREADGet a contact list item via GET /contacts/lists/{list_id}/items/{item_id}.
catsone_get_contacts_searchREADSearch contacts via GET /contacts/search.
catsone_get_contacts_statusesREADList contact statuses via GET /contacts/statuses.
catsone_get_contacts_statuses_by_idREADGet contact status via GET /contacts/statuses/{id}.
catsone_get_eventsREADList all events starting after an id via GET /events. Paginates by CURSOR rather than by page/per_page, and there are two: the response carries `last_id`, which the next call passes as `starting_after_id`, or pass an RFC 3339 `starting_after_timestamp` instead. The response's own self link echoes whichever one CATS used.
catsone_get_jobsREADList all jobs via GET /jobs.
catsone_get_jobs_applications_by_application_idREADGet a job application via GET /jobs/applications/{application_id}.
catsone_get_jobs_applications_by_application_id_fieldsREADList job application fields via GET /jobs/applications/{application_id}/fields.
catsone_get_jobs_by_idREADGet a job via GET /jobs/{id}.
catsone_get_jobs_by_id_attachmentsREADList job attachments via GET /jobs/{id}/attachments.
catsone_get_jobs_by_id_custom_fieldsREADList job custom field values via GET /jobs/{id}/custom_fields.
catsone_get_jobs_by_id_pipelinesREADList pipelines by job via GET /jobs/{id}/pipelines.
catsone_get_jobs_by_id_tasksREADList job tasks via GET /jobs/{id}/tasks.
catsone_get_jobs_by_job_id_applicationsREADList applications by job via GET /jobs/{job_id}/applications.
catsone_get_jobs_by_job_id_custom_fields_by_custom_field_idREADGet a job custom field value via GET /jobs/{job_id}/custom_fields/{custom_field_id}.
catsone_get_jobs_by_job_id_tagsREADList all job tags via GET /jobs/{job_id}/tags.
catsone_get_jobs_custom_fieldsREADList job custom fields via GET /jobs/custom_fields.
catsone_get_jobs_custom_fields_by_idREADGet a job custom field via GET /jobs/custom_fields/{id}.
catsone_get_jobs_listsREADList all job lists via GET /jobs/lists.
catsone_get_jobs_lists_by_idREADGet a job list via GET /jobs/lists/{id}.
catsone_get_jobs_lists_by_id_itemsREADList all job list items via GET /jobs/lists/{id}/items.
catsone_get_jobs_lists_by_list_id_items_by_item_idREADGet a job list item via GET /jobs/lists/{list_id}/items/{item_id}.
catsone_get_jobs_searchREADSearch jobs via GET /jobs/search.
catsone_get_jobs_statusesREADList job statuses via GET /jobs/statuses.
catsone_get_jobs_statuses_by_idREADGet a job status via GET /jobs/statuses/{id}.
catsone_get_pipelinesREADList all pipelines via GET /pipelines.
catsone_get_pipelines_by_idREADGet a pipeline via GET /pipelines/{id}.
catsone_get_pipelines_by_id_statusesREADGet pipeline historical statuses via GET /pipelines/{id}/statuses.
catsone_get_pipelines_workflowsREADList workflows via GET /pipelines/workflows.
catsone_get_pipelines_workflows_by_idREADGet a workflow via GET /pipelines/workflows/{id}.
catsone_get_pipelines_workflows_by_workflow_id_statusesREADList workflow statuses via GET /pipelines/workflows/{workflow_id}/statuses.
catsone_get_pipelines_workflows_by_workflow_id_statuses_by_status_idREADGet a workflow status via GET /pipelines/workflows/{workflow_id}/statuses/{status_id}.
catsone_get_portalsREADList all portals via GET /portals.
catsone_get_portals_by_idREADGet a portal via GET /portals/{id}.
catsone_get_portals_by_id_jobsREADList portal jobs via GET /portals/{id}/jobs.
catsone_get_portals_by_id_registrationREADGet portal registration application via GET /portals/{id}/registration.
catsone_get_siteREADGet site via GET /site.
catsone_get_tagsREADList all tags via GET /tags.
catsone_get_tags_by_idREADGet a tag via GET /tags/{id}.
catsone_get_tasksREADList all tasks via GET /tasks.
catsone_get_tasks_by_idREADGet a task via GET /tasks/{id}.
catsone_get_triggersREADList all triggers via GET /triggers.
catsone_get_triggers_by_idREADGet a trigger via GET /triggers/{id}.
catsone_get_usersREADList all users via GET /users.
catsone_get_users_by_idREADGet a user via GET /users/{id}.
catsone_get_webhooksREADList all webhooks via GET /webhooks.
catsone_get_webhooks_by_idREADGet a webhook via GET /webhooks/{id}.
catsone_get_work_history_by_work_history_idREADHistory get a work history via GET /work_history/{work_history_id}.
catsone_post_activities_searchREADFilter activities via POST /activities/search.
catsone_post_backupsWRITECreate a backup via POST /backups.
catsone_post_candidatesWRITECreate a candidate via POST /candidates. `password` in the body is the CANDIDATE PORTAL password, set on the candidate's behalf -- not an API credential, and not this connection's. Agentic Fabriq never logs a request body and CATS does not echo the value back: measured 2026-09-24, its validation errors name the offending FIELD only ('date_available must be a valid date...'), and the 201 carries no body at all.
catsone_post_candidates_authorizationREADAuthorize a candidate via POST /candidates/authorization. CREDENTIAL-VERIFICATION PRIMITIVE THAT YIELDS PII ON SUCCESS, and the only tool here that is one. It checks a CANDIDATE PORTAL email/password pair, and a correct pair answers 200 with that candidate's ENTIRE record -- legal name, primary and secondary emails, postal address, phone numbers, social-media URLs and website -- so a single correct guess returns personal data, not merely a yes. Both legs measured 2026-09-24: correct pair -> 200 with the whole candidate; wrong password on a REAL email -> 404 'No candidate could be found with that login information.'; unknown email -> the SAME 404, so it does not reveal whether the account exists. Catalogued as a READ because it mutates nothing -- that is the effect, and the catalogue has no axis for sensitivity -- but granting it lets the holder test candidate portal passwords AND read a candidate's personal record without knowing, or being able to guess, its id.
catsone_post_candidates_by_candidate_id_emailsWRITECreate a candidate email via POST /candidates/{candidate_id}/emails.
catsone_post_candidates_by_candidate_id_phonesWRITECreate a candidate phone via POST /candidates/{candidate_id}/phones.
catsone_post_candidates_by_candidate_id_tagsWRITEReplace candidate tags via POST /candidates/{candidate_id}/tags.
catsone_post_candidates_by_id_activitiesWRITECreate a candidate activity via POST /candidates/{id}/activities.
catsone_post_candidates_by_id_work_historyWRITECreate a candidate work history item via POST /candidates/{id}/work_history.
catsone_post_candidates_listsWRITECreate a candidate list via POST /candidates/lists.
catsone_post_candidates_lists_by_id_itemsWRITECreate candidate list items via POST /candidates/lists/{id}/items.
catsone_post_candidates_searchREADFilter candidates via POST /candidates/search.
catsone_post_companiesWRITECreate a company via POST /companies.
catsone_post_companies_by_company_id_departmentsWRITEAdd department via POST /companies/{company_id}/departments.
catsone_post_companies_by_company_id_phonesWRITECreate a company phone via POST /companies/{company_id}/phones.
catsone_post_companies_by_company_id_tagsWRITEReplace company tags via POST /companies/{company_id}/tags.
catsone_post_companies_by_id_statusWRITEChange company status via POST /companies/{id}/status.
catsone_post_companies_listsWRITECreate a company list via POST /companies/lists.
catsone_post_companies_lists_by_id_itemsWRITECreate company list items via POST /companies/lists/{id}/items.
catsone_post_companies_searchREADFilter companies via POST /companies/search.
catsone_post_contactsWRITECreate a contact via POST /contacts.
catsone_post_contacts_by_contact_id_emailsWRITECreate a contact email via POST /contacts/{contact_id}/emails.
catsone_post_contacts_by_contact_id_phonesWRITECreate a contact phone via POST /contacts/{contact_id}/phones.
catsone_post_contacts_by_contact_id_tagsWRITEReplace contact tags via POST /contacts/{contact_id}/tags.
catsone_post_contacts_by_id_activitiesWRITECreate a contact activity via POST /contacts/{id}/activities.
catsone_post_contacts_by_id_statusWRITEChange contact status via POST /contacts/{id}/status.
catsone_post_contacts_listsWRITECreate a contact list via POST /contacts/lists.
catsone_post_contacts_lists_by_id_itemsWRITECreate contact list items via POST /contacts/lists/{id}/items.
catsone_post_contacts_searchREADFilter contacts via POST /contacts/search.
catsone_post_jobsWRITECreate a job via POST /jobs.
catsone_post_jobs_by_id_statusWRITEChange job status via POST /jobs/{id}/status.
catsone_post_jobs_by_job_id_tagsWRITEReplace job tags via POST /jobs/{job_id}/tags.
catsone_post_jobs_listsWRITECreate a job list via POST /jobs/lists.
catsone_post_jobs_lists_by_id_itemsWRITECreate job list items via POST /jobs/lists/{id}/items.
catsone_post_jobs_searchREADFilter jobs via POST /jobs/search.
catsone_post_pipelinesWRITECreate a pipeline via POST /pipelines.
catsone_post_pipelines_by_id_statusWRITEChange pipeline status via POST /pipelines/{id}/status.
catsone_post_pipelines_searchREADFilter pipelines via POST /pipelines/search.
catsone_post_portals_by_id_registrationWRITESubmit portal registration application via POST /portals/{id}/registration.
catsone_post_portals_by_portal_id_jobs_by_job_idWRITESubmit via POST /portals/{portal_id}/jobs/{job_id}.
catsone_post_tasksWRITECreate a task via POST /tasks.
catsone_post_webhooksWRITECreate a webhook via POST /webhooks. `secret` is the signing secret CATS will use on deliveries to `target_url`; the CALLER chooses it, so keep a copy -- measured 2026-09-24, NEITHER read hands it back. `GET /webhooks` and `GET /webhooks/{id}` return only id, event, target_url and _links, and the read shape is byte-identical for a webhook created with a secret and one created without.
catsone_put_activities_by_idWRITEUpdate an activity via PUT /activities/{id}.
catsone_put_candidates_by_candidate_id_custom_fields_by_custom_field_idWRITEUpdate a candidate custom field via PUT /candidates/{candidate_id}/custom_fields/{custom_field_id}.
catsone_put_candidates_by_candidate_id_emails_by_idWRITEUpdate a candidate email via PUT /candidates/{candidate_id}/emails/{id}.
catsone_put_candidates_by_candidate_id_phones_by_idWRITEUpdate a candidate phone via PUT /candidates/{candidate_id}/phones/{id}.
catsone_put_candidates_by_candidate_id_tagsWRITEAttach candidate tags via PUT /candidates/{candidate_id}/tags.
catsone_put_candidates_by_idWRITEUpdate a candidate via PUT /candidates/{id}. `password` in the body is the CANDIDATE PORTAL password, set on the candidate's behalf -- not an API credential, and not this connection's. Agentic Fabriq never logs a request body and CATS does not echo the value back (measured 2026-09-24).
catsone_put_candidates_by_id_thumbnailWRITEChange a candidate thumbnail via PUT /candidates/{id}/thumbnail.
catsone_put_candidates_work_history_by_idWRITEUpdate a candidate work history item via PUT /candidates/work_history/{id}.
catsone_put_companies_by_company_id_custom_fields_by_custom_field_idWRITEUpdate a company custom field via PUT /companies/{company_id}/custom_fields/{custom_field_id}.
catsone_put_companies_by_company_id_phones_by_idWRITEUpdate a company phone via PUT /companies/{company_id}/phones/{id}.
catsone_put_companies_by_company_id_tagsWRITEAttach company tags via PUT /companies/{company_id}/tags.
catsone_put_companies_by_idWRITEUpdate a company via PUT /companies/{id}.
catsone_put_companies_by_id_thumbnailWRITEChange a company thumbnail via PUT /companies/{id}/thumbnail.
catsone_put_companies_departments_by_department_idWRITEUpdate department via PUT /companies/departments/{department_id}.
catsone_put_contacts_by_contact_id_custom_fields_by_custom_field_idWRITEUpdate a contact custom field via PUT /contacts/{contact_id}/custom_fields/{custom_field_id}.
catsone_put_contacts_by_contact_id_emails_by_idWRITEUpdate a contact email via PUT /contacts/{contact_id}/emails/{id}.
catsone_put_contacts_by_contact_id_phones_by_idWRITEUpdate a contact phone via PUT /contacts/{contact_id}/phones/{id}.
catsone_put_contacts_by_contact_id_tagsWRITEAttach contact tags via PUT /contacts/{contact_id}/tags.
catsone_put_contacts_by_idWRITEUpdate a contact via PUT /contacts/{id}.
catsone_put_contacts_by_id_thumbnailWRITEChange a contact thumbnail via PUT /contacts/{id}/thumbnail.
catsone_put_jobs_by_idWRITEUpdate a job via PUT /jobs/{id}.
catsone_put_jobs_by_job_id_custom_fields_by_custom_field_idWRITEUpdate a job custom field via PUT /jobs/{job_id}/custom_fields/{custom_field_id}.
catsone_put_jobs_by_job_id_tagsWRITEAttach job tags via PUT /jobs/{job_id}/tags.
catsone_put_pipelines_by_idWRITEUpdate a pipeline via PUT /pipelines/{id}.
catsone_put_portals_by_portal_id_jobs_by_job_idWRITEPublish portal job via PUT /portals/{portal_id}/jobs/{job_id}.
catsone_put_tasks_by_idWRITEUpdate a task via PUT /tasks/{id}.
catsone_put_work_history_by_work_history_idWRITEHistory update a work history via PUT /work_history/{work_history_id}.
Often connected alongside
Put CATSone behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.