Skip to main content
HoundDog API Documentation

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, annually or custom (renewal_months required with custom).
  • signing_requirements[].frequency: once, annually, per_project or custom; version_policy: any (any version of the template satisfies it) or latest.

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.