Compliance profiles
On accounts with multi-factor compliance, a compliance profile bundles everything a party must provide: an insurance requirement, a W-9, and documents to sign. Each party has one profile. Every route on this page needs multi-factor compliance on the account (enable_multi_factor_compliance); otherwise it answers 403 feature_disabled.
| Operation | Scope |
|---|---|
GET /compliance_profiles |
read |
GET /compliance_profiles/:id |
read |
POST /compliance_profiles |
read_write |
PATCH /compliance_profiles/:id |
read_write |
DELETE /compliance_profiles/:id |
read_write |
The profile entity
{
"id": 14,
"name": "Subcontractor, full",
"description": null,
"is_default": true,
"archived": false,
"insurance_requirement_id": 42,
"w9_requirement": {
"required": true,
"frequency": "annually",
"renewal_months": null,
"annual_anchor_month": 1,
"annual_anchor_day": 31,
"annual_grace_period_days": 30
},
"signing_requirements": [
{
"id": 61,
"signing_template_id": 7,
"signing_template_name": "Master Subcontract Agreement",
"required": true,
"version_policy": "latest",
"frequency": "once",
"renewal_months": null,
"annual_anchor_month": null,
"annual_anchor_day": null,
"annual_grace_period_days": null,
"auto_send_on_new_version": false
}
],
"created_at": "2026-05-02T09:00:00Z",
"updated_at": "2026-09-30T09:00:00Z"
}
w9_requirement.frequency:once,annuallyorcustom(renewal_monthsrequired withcustom).signing_requirements[].frequency:once,annually,per_projectorcustom;version_policy:any(any version of the template satisfies it) orlatest.
GET /compliance_profiles, GET /compliance_profiles/:id
The account's profiles (archived ones included) in the collection envelope, and one profile.
POST /compliance_profiles
Body: name (required), description, is_default, insurance_requirement_id, w9_requirement (an object with the fields above), signing_requirements (an array of objects with signing_template_id, required, frequency, version_policy, renewal_months, position). When no w9_requirement is sent, a non-required one is created. Ids outside your account are 422 naming the field. Response 201.
PATCH /compliance_profiles/:id
Updates the fields you send. Inside signing_requirements, send id to update an existing entry and id with _destroy: true to remove one.
A rename on an account whose JobTread integration syncs compliance profiles is 422: make it on the dashboard, which also updates the value every linked JobTread vendor holds. Response 200.
DELETE /compliance_profiles/:id
Profiles are archived, never deleted: parties keep the profile and its history, and it disappears from pickers. Archiving an already archived profile succeeds. The default profile cannot be archived (422). Response 200 with the archived profile.