Account and users
Your account's settings and the people who use the dashboard. These routes replace v2's earlier account_settings resource.
| Operation | Scope |
|---|---|
GET /account |
read |
PATCH /account |
read_write |
GET /users |
read |
POST /users |
read_write |
PATCH /users/:id |
read_write |
DELETE /users/:id |
read_write |
The account entity
{
"id": 4127,
"name": "Example Builders",
"party_name": "Subcontractors",
"party_name_singular": "Subcontractor",
"project_name": "Jobs",
"certificate_holder_name": "Example Builders LLC",
"certificate_holder_address1": "1 Plaza",
"certificate_holder_address2": null,
"certificate_holder_city": "Austin",
"certificate_holder_state": "TX",
"certificate_holder_postal_code": "78701",
"contact_limit_override": null,
"contact_delay_override": null,
"require_approval_override_date": true,
"require_approval_override_notes": false,
"...": "every setting listed below"
}
Settings of features your account does not use are present with an empty or default value.
party_name, party_name_singular and project_name are read-only: the nouns your dashboard uses for parties and projects (set by party_name_override and project_name_override). Use them to label your own UI; the API itself always says parties and projects.
GET /account
The account entity.
PATCH /account
Updates the settings you send and leaves the rest alone. These are the settings the dashboard's Settings page lets an account user change:
name, project_name_override,
party_name_override, note_to_party, request_email_note,
individual_name_override, note_to_individuals, individual_email_note,
project_completion_retention_days,
party_assignment_mode (once a User custom field exists),
tag_name_override,
triage_queue_name_override, triage_entry_gate_mode, triage_readd_on_resubmission,
collect_w9,
enable_party_notes,
certificate_holder_name, certificate_holder_address1, certificate_holder_address2, certificate_holder_city, certificate_holder_state, certificate_holder_postal_code, cert_copy_address, cert_copy_all_submissions, cert_copy_show_external_id, apply_umb_to_gl_limits, apply_umb_to_auto_limits, contact_limit_override, contact_delay_override, validate_certificate_holder, validate_certificate_holder_address, workday_notifications_only, show_vendor_contact_information, enable_editing_of_vendor_addresses, enable_expiration_reminders.
Read-only here: require_mfa, require_approval_override_date and require_approval_override_notes are served by GET /account but can be changed only by a person on the dashboard's Settings page, so a key can never turn off two-factor sign-in or loosen the approval-override policy. Sending the value already served is accepted and changes nothing (so a GET body can be sent back as is); any other value is 422 validation_failed naming the field, and nothing is changed. Feature switches that only HoundDog staff can turn on are not settable here either. A setting that belongs to a feature your account does not use: changing it is 403 feature_disabled naming the field, and sending the stored value back is accepted. The labels (party_name_override, project_name_override, tag_name_override, individual_name_override, triage_queue_name_override) and triage_entry_gate_mode, party_assignment_mode and project_completion_retention_days take only the choices the dashboard's Settings page offers (listed in the contract); any other new value is 422 validation_failed naming the field, while sending back the value already stored is always accepted, an older label no longer offered on the dashboard included. Side effect: changing a setting that affects compliance (for example validate_certificate_holder, validate_certificate_holder_address, apply_umb_to_gl_limits, apply_umb_to_auto_limits) rechecks every active party in the background, which can change statuses, fire their events and webhooks, and start requests.
Response 200 with the entity. Errors: 403 feature_disabled (a changed setting of a feature your account does not use); 422 validation_failed (an invalid value, a value outside a setting's choices, or one of the three read-only settings above sent with a value other than the one served). Event: Account Settings Updated, recorded with your key.
The user entity
{ "id": 301, "email": "[email protected]", "first_name": "Sam", "last_name": "Ortiz", "account_status": "User", "invitation_pending": false }
account_status is the user's tier: Admin, User or Agent. invitation_pending is true until the invited person sets up their login.
GET /users
The account's users in the collection envelope.
POST /users
Invites a user by email. Body: email (required, not already in use), first_name, last_name, account_status (Admin, User or Agent; defaults to User). The invitee receives the invitation email. Event: User Added. Response 201. Errors: 422 validation_failed (an email that is not a plain email address, an email already in use, an unknown account_status). A user's email cannot be changed through the API.
A key can invite an Admin, so only users who hold the Manage API Access permission can create keys (Authentication).
PATCH /users/:id
Updates first_name, last_name and account_status. Event: User Updated, recorded with your key, its details holding the changed fields. Response 200. Errors: 422 validation_failed (an unknown account_status).
DELETE /users/:id
Removes the user as the dashboard does: an invitation that was never accepted is deleted; a user who has used the account is deactivated (kept for the history), can no longer sign in, and no longer appears in GET /users. Event: User Removed, recorded with your key. Response 204.