{"openapi":"3.1.0","info":{"title":"Houzz Pro API v1","version":"0.1.0","description":"The Houzz Pro API gives verified partners programmatic access to the data and workflows that pros use every day — projects, leads, contacts, tasks, scheduling, files, and more.\n\nAll endpoints require OAuth 2.0 authentication using the client credentials flow. Include a Bearer token in the `Authorization` header on every request. Tokens are issued per scope; the required scope is listed under the **Authorization** section of each operation.\n\n**Base URL:** `https://pro-api.houzz.com/api`\n\n**Versioning:** All endpoints are prefixed with `/v1`. Breaking changes will be introduced under a new version prefix.\n\n**Pagination:** List endpoints accept `limit` (max 300, default 20) and `offset` query parameters and return `{ data, limit, offset, total }`.\n\n**Errors:** All errors return `{ error: { code, message } }` with a standard HTTP status code."},"servers":[{"url":"https://pro-api.houzz.com/api","description":"production"},{"url":"https://pro-api.stghouzz.com/api","description":"staging"}],"tags":[{"name":"PostalAddress","description":"A postal location — street, city, state, postal code, country. Postal addresses do not have their own endpoints; they appear inline on the resources that carry them. Project and lead addresses additionally carry an id and a name (see those resources)."},{"name":"CustomField","description":"A custom field definition scoped to a company and an entity type. Used by integrations to store cross-reference IDs such as external_id."},{"name":"CustomFieldEntry","description":"Reads and writes custom field entry values on any entity. Used by integrations to store cross-reference IDs such as external_id after creating a record."},{"name":"Project","description":"A project tracks an active home improvement job managed by a pro. Projects are linked to a client, carry a status, budget, type, and one or more addresses. Related resources such as tasks, milestones, daily logs, and files are scoped under a project. Archiving a project hides it from active views without deleting it; the delete operation permanently removes the project."},{"name":"Project Status","description":"A project status represents a workflow state for a project (e.g. Active, On Hold, Completed). This is a read-only reference list that includes both system-defined and account-specific custom statuses. Retrieve available statuses and pass the desired statusId when creating or updating a project."},{"name":"Project Type","description":"A project type is a custom categorization label defined by the pro's account (e.g. Kitchen Remodel, New Construction). This is a read-only reference list — retrieve available types and pass the desired type ID as the projectType field when creating or updating a project."},{"name":"Lead","description":"A lead (also called an inquiry) tracks a potential job opportunity before it becomes a formal project. Leads capture client interest, budget, expected start date, and current pipeline phase. A lead can be converted to a project — once converted, the associated projectId is populated. Leads support soft deletion via archiving."},{"name":"Lead Phase","description":"A lead phase represents a stage in the pre-project sales pipeline. Built-in phases include New Inquiry, Follow Up, Meeting, Estimate, Connected, and Won; accounts may also define custom phases with their own IDs. This is a read-only reference list — retrieve available phases and pass the desired phaseId when creating or updating a lead."},{"name":"Milestone","description":"A milestone is an item on a project or lead schedule. Milestones form a hierarchy by milestoneType: a PHASE is a top-level grouping without its own dates, while ITEM and CHECKPOINT rows carry start/due dates and a status (OPEN or COMPLETED) and are nested under a phase via parentMilestoneId. When a schedule baseline has been set, milestones also expose baseline planned dates. Tasks can be linked to a milestone. List and create operations are scoped under the parent resource path (e.g. /v1/projects/:projectId/milestones)."},{"name":"Daily Log","description":"A daily log is a timestamped field note attached to a project. Pros use daily logs to record on-site activity, progress notes, or events for a specific date range. Each log belongs to exactly one project and supports free-text content."},{"name":"Punchlist","description":"A punchlist is a shared checklist of outstanding items attached to a project, used to track completion items before handover. Each project has exactly one punchlist; if none exists yet, it is created automatically the first time it is fetched, so there is no separate punchlist-creation endpoint. The punchlist itself can be set to Private or Shared visibility; individual punchlist items are managed through the Tasks resource."},{"name":"Task","description":"A task is an actionable work item belonging to a project, lead, or punchlist. Tasks have a title, optional due date, completion status, and visibility (Private or Shared). Tasks can be linked to a milestone for scheduling purposes. List and create operations are scoped under the parent resource path (e.g. /v1/projects/:projectId/tasks). Punchlist tasks are created by supplying a punchlistId on the project task create endpoint. A task's parent and any punchlist link are fixed at creation and cannot be changed afterward."},{"name":"File","description":"A file represents an uploaded document, image, or other asset attached to a project or other resource. Files are organized in a folder hierarchy — both files and folders are returned by this resource (distinguished by the type field). Files can be archived or permanently deleted. Additional operations allow creating folders and bulk-copying or moving files between locations."},{"name":"Team Member","description":"A team member is an internal employee or staff person on a pro's account. Team members are invited by email, assigned a role, and can have a status of PENDING, CONNECTED, or DEACTIVATED. The delete operation deactivates the team member rather than permanently removing them from the account."},{"name":"Subcontractor","description":"A subcontractor is an external trade professional or company invited to collaborate on a pro's jobs. Subcontractors are identified by their trade specializations and can have a status of PENDING, CONNECTED, or DEACTIVATED. Creating a subcontractor sends an invitation to the provided email address. The delete operation deactivates the subcontractor rather than permanently removing them."},{"name":"Subcontractor Trade","description":"A subcontractor trade represents a specialized construction discipline (e.g. Electrical, Plumbing, HVAC). This is a read-only reference list — retrieve available trades and pass the desired trade IDs when creating or updating a subcontractor."},{"name":"Vendor","description":"A vendor is a business or individual that provides materials, products, or services to a pro. Vendors are scoped at the company level and can be linked to catalog items, purchase orders, purchase documents, contracts, and project items. They carry contact details, payment terms, tax settings, and account information used in purchasing workflows. Vendors are never permanently deleted — retire one with the archive operation, and restore it with unarchive."},{"name":"Contact","description":"A contact represents an individual person in a pro's address book — typically a homeowner, business owner, or other point of contact. Contacts can be associated with projects, belong to a contact group, and carry contact details such as email, phone, and address. Deleting a contact is permanent and optionally removes any connected leads."},{"name":"Contact Group","description":"A contact group is a named collection of contacts (homeowners or businesses) that belong to a pro's account, also referred to internally as a CRM account. Groups can be typed as HOMEOWNER or BUSINESS and support soft deletion via the archived flag. Each group can have multiple contacts linked at either PRIMARY or SECONDARY level."},{"name":"Contact Group Contact","description":"A contact-group membership links an individual contact to a contact group at a designated level (PRIMARY or SECONDARY). Use these endpoints to add a contact to a group, change their level, or remove them from the group. Add and update operations return the updated contact group, including its full contactGroupConnections list (the graph mutations return the parent group; individual connections are not addressable in the response)."},{"name":"Entity Assignment","description":"Read and manage the assignees on a supported entity. An assignee can be a pro team member or subcontractor, a client, or a person who has been invited but has not yet joined the team."},{"name":"Webhook Subscription","description":"A webhook subscription registers an HTTPS endpoint to receive real-time event notifications for your Houzz Pro account. Each subscription targets one URL and can be configured with one or more triggers that determine which resource events (create, update, delete) trigger a delivery. Subscriptions are scoped to your company and enforced via service discovery against the houzz-api-grpc deployment."},{"name":"Webhook Trigger","description":"A webhook trigger represents a specific event type on a resource that can fire a webhook delivery. This endpoint returns the full catalog of available triggers across all supported resources. Subscribe to a trigger by referencing its resourceName and eventType when configuring a webhook subscription. The complete catalog is listed below.\n\n### Available triggers\n\n| resourceName | eventType | label | description |\n| --- | --- | --- | --- |\n| `client` | `create` | Client Created | Fires when a new client is added to the company |\n| `client` | `update` | Client Updated | Fires when a client record is modified |\n| `client` | `delete` | Client Deleted | Fires when a client is removed from the company |\n| `project` | `create` | Project Created | Fires when a new project is created |\n| `project` | `update` | Project Updated | Fires when a project is modified |\n| `project` | `delete` | Project Deleted | Fires when a project is deleted |\n| `lead` | `create` | Lead Created | Fires when a new lead is received |\n| `lead` | `update` | Lead Updated | Fires when a lead record is modified |\n| `lead` | `delete` | Lead Deleted | Fires when a lead is removed |\n| `task` | `create` | Task Created | Fires when a new task is created |\n| `task` | `update` | Task Updated | Fires when a task is modified |\n| `task` | `delete` | Task Deleted | Fires when a task is deleted |\n| `milestone` | `create` | Milestone Created | Fires when a new milestone is created |\n| `milestone` | `update` | Milestone Updated | Fires when a milestone is modified |\n| `milestone` | `delete` | Milestone Deleted | Fires when a milestone is deleted |\n| `vendor` | `create` | Vendor Created | Fires when a new vendor is added |\n| `vendor` | `update` | Vendor Updated | Fires when a vendor record is modified |\n| `file` | `create` | File Created | Fires when a new file is uploaded |\n| `file` | `update` | File Updated | Fires when a file record is modified |\n| `file` | `delete` | File Deleted | Fires when a file is permanently deleted from the trash |\n| `team-member` | `create` | Team Member Created | Fires when a new team member is added |\n| `team-member` | `update` | Team Member Updated | Fires when a team member record is modified |\n| `subcontractor` | `create` | Subcontractor Created | Fires when a new subcontractor is added |\n| `subcontractor` | `update` | Subcontractor Updated | Fires when a subcontractor record is modified |\n| `daily-log` | `create` | Daily Log Created | Fires when a new daily log is created |\n| `daily-log` | `update` | Daily Log Updated | Fires when a daily log is modified |\n| `daily-log` | `delete` | Daily Log Deleted | Fires when a daily log is deleted |\n| `contact-group` | `create` | Contact Group Created | Fires when a new contact group is created |\n| `contact-group` | `update` | Contact Group Updated | Fires when a contact group is modified |\n| `contact-group` | `delete` | Contact Group Deleted | Fires when a contact group is deleted |"},{"name":"Note","description":"A note is a free-text entry attached to exactly one project or lead. Notes can also represent CRM call logs by setting type to CALL_LOG along with a subType describing the outcome of the call. There is no hard delete — archiving (via the archive operation) is the only way to remove a note."}],"paths":{"/v1/customFields":{"get":{"operationId":"customfield.list","tags":["CustomField"],"summary":"List custom field definitions","description":"Filter by customableType","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"customableType","required":false,"schema":{"type":"string","description":"Filter by entity type the custom field is scoped to. Omit to return custom fields for all entity types.","enum":["Lead","Project","Contact","Vendor","DailyLog","Task"]},"description":"Filter by entity type the custom field is scoped to. Omit to return custom fields for all entity types."}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CustomField"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"customfield.create","tags":["CustomField"],"summary":"Create custom field","description":"Create a custom field definition for a given entity type.","responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/CustomField"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Field name"},"type":{"type":"string","description":"Field type (text, checkbox, link, date, single_select, duration)"},"customableType":{"type":"string","description":"Entity type the custom field is scoped to","enum":["Lead","Project","Contact","Vendor","DailyLog","Task"]},"description":{"type":"string","description":"Field description"},"options":{"type":"array","description":"Options for single_select type","items":{"type":"string"}}},"required":["name","type","customableType"]}}}}}},"/v1/customFields/getEntityByCustomFieldValue":{"get":{"operationId":"customfield.getEntityByCustomFieldValue","tags":["CustomField"],"summary":"Get entity by custom field value","description":"Resolve the entity whose custom field named `fieldName` holds `value`. Requires the read scope for the requested entityType — a token without it receives no data.","parameters":[{"in":"query","name":"entityType","required":true,"schema":{"type":"string","description":"Entity type to search.","enum":["Lead","Project","Contact","Vendor","DailyLog","Task"]},"description":"Entity type to search."},{"in":"query","name":"fieldName","required":true,"schema":{"type":"string","description":"Name of the custom field to match (e.g. external_id)."},"description":"Name of the custom field to match (e.g. external_id)."},{"in":"query","name":"value","required":true,"schema":{"type":"string","description":"Value to match against the custom field."},"description":"Value to match against the custom field."}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"entityType":{"type":"string","description":"Type of the matched entity.","enum":["Lead","Project","Contact","Vendor","DailyLog","Task"]},"entityId":{"type":"integer","description":"ID of the matched entity."},"entity":{"type":"object","description":"The matched entity, shaped like the corresponding resource — see `entityType` to determine which."}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":[]}]}},"/v1/customFieldEntries":{"get":{"operationId":"customfieldentry.list","tags":["CustomFieldEntry"],"summary":"List custom field entries","description":"List the custom field entry values stored on a single entity.","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"entityType","required":true,"schema":{"type":"string","description":"Entity type the custom field entries belong to.","enum":["Lead","Project","Contact","Vendor","DailyLog","Task"]},"description":"Entity type the custom field entries belong to."},{"in":"query","name":"entityId","required":true,"schema":{"type":"integer","description":"ID of the entity."},"description":"ID of the entity."}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CustomFieldEntry"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":[]}]},"patch":{"operationId":"customfieldentry.set","tags":["CustomFieldEntry"],"summary":"Set custom field entries","description":"Set custom field entry values on an entity.","responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/CustomFieldEntry"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:leads"]},{"bearerAuth":["write:projects"]},{"bearerAuth":["write:contacts"]},{"bearerAuth":["write:vendors"]},{"bearerAuth":["write:daily-logs"]},{"bearerAuth":["write:tasks"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"entityId":{"type":"integer","description":"ID of the entity"},"entityType":{"type":"string","description":"Entity type the custom field entries belong to.","enum":["Lead","Project","Contact","Vendor","DailyLog","Task"]},"customFieldEntries":{"type":"array","description":"Entries to set. Each item needs value plus either id or customFieldId.","items":{"type":"object","properties":{"id":{"type":"integer","description":"ID of an existing entry to update"},"customFieldId":{"type":"integer","description":"ID of the custom field definition. Required when id is not given."},"value":{"type":"string","description":"Value to store"}},"required":["value"]}}},"required":["entityId","entityType","customFieldEntries"]}}}}}},"/v1/projects/{id}":{"get":{"operationId":"project.get","tags":["Project"],"summary":"Get Project","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Project"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:projects"]}]},"patch":{"operationId":"project.update","tags":["Project"],"summary":"Update Project","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Project"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:projects"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name"},"contactId":{"type":"integer","description":"Contact ID"},"statusId":{"type":"integer","description":"Status ID"},"ownerId":{"type":"integer","description":"Owner user ID"},"budget":{"type":"number","description":"Project budget"},"projectType":{"type":"integer","description":"Project type ID"},"projectTypeName":{"type":"string","description":"Project type name"},"archived":{"type":"boolean","description":"Whether the project is archived"},"notes":{"type":"string","description":"Project notes"},"addresses":{"type":"array","description":"Upsert addresses. Omit id to create; include id to update.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Address ID — omit to create, include to update"},"address":{"type":"object","description":"Address fields","properties":{"name":{"type":"string","description":"Label for this address — typically the site or recipient name"},"address":{"type":"string","description":"Address line 1"},"address2":{"type":"string","description":"Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"zip":{"type":"string","description":"Postal code"},"country":{"type":"string","description":"Country"}},"required":["name"]}}}}}}}}}},"delete":{"operationId":"project.delete","tags":["Project"],"summary":"Delete Project","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:projects"]}]}},"/v1/projects":{"get":{"operationId":"project.list","tags":["Project"],"summary":"List projects","description":"Archived projects are included unless you explicitly pass archived=false.","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"statusId","required":false,"schema":{"type":"integer","description":"Filter by project status ID (comma-separated for multiple)"},"description":"Filter by project status ID (comma-separated for multiple)"},{"in":"query","name":"archived","required":false,"schema":{"type":"boolean","description":"Filter by archived state (true/false)"},"description":"Filter by archived state (true/false)"},{"in":"query","name":"contactId","required":false,"schema":{"type":"integer","description":"Filter by contact ID"},"description":"Filter by contact ID"}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Project"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:projects"]}]},"post":{"operationId":"project.create","tags":["Project"],"summary":"Create Project","responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Project"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:projects"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Project name"},"contactId":{"type":"integer","description":"Contact ID"},"statusId":{"type":"integer","description":"Status ID"},"ownerId":{"type":"integer","description":"Owner user ID"},"budget":{"type":"number","description":"Project budget"},"projectType":{"type":"integer","description":"Project type ID"},"projectTypeName":{"type":"string","description":"Project type name"},"archived":{"type":"boolean","description":"Whether the project is archived"},"notes":{"type":"string","description":"Project notes"},"addresses":{"type":"array","description":"Upsert addresses. Omit id to create; include id to update.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Address ID — omit to create, include to update"},"address":{"type":"object","description":"Address fields","properties":{"name":{"type":"string","description":"Label for this address — typically the site or recipient name"},"address":{"type":"string","description":"Address line 1"},"address2":{"type":"string","description":"Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"zip":{"type":"string","description":"Postal code"},"country":{"type":"string","description":"Country"}},"required":["name"]}}}}},"required":["name"]}}}}}},"/v1/project-statuses":{"get":{"operationId":"project-status.list","tags":["Project Status"],"summary":"List Project Statuses","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectStatus"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:projects"]}]}},"/v1/project-types":{"get":{"operationId":"project-type.list","tags":["Project Type"],"summary":"List Project Types","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectType"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:projects"]}]}},"/v1/leads/{id}":{"get":{"operationId":"lead.get","tags":["Lead"],"summary":"Get Lead","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Lead"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:leads"]}]},"patch":{"operationId":"lead.update","tags":["Lead"],"summary":"Update Lead","description":"To move a lead to a different pipeline phase, use the update phase operation.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Lead"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:leads"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Lead name"},"contactId":{"type":"integer","description":"Contact ID"},"description":{"type":"string","description":"Lead description"},"budget":{"type":"number","description":"Lead budget"},"type":{"type":"string","description":"Project type label"},"serviceTypeId":{"type":"integer","description":"Service type ID"},"sourceCode":{"type":"integer","description":"Source code"},"source":{"type":"string","description":"Source label"},"expectedStartDate":{"type":"string","description":"Expected start date"},"addresses":{"type":"array","description":"Upsert addresses. Omit id to create; include id to update.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Address ID — omit to create, include to update"},"address":{"type":"object","description":"Address fields","properties":{"name":{"type":"string","description":"Label for this address — typically the site or recipient name"},"address":{"type":"string","description":"Address line 1"},"address2":{"type":"string","description":"Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"zip":{"type":"string","description":"Postal code"},"country":{"type":"string","description":"Country"}},"required":["name"]}}}}}}}}}},"delete":{"operationId":"lead.delete","tags":["Lead"],"summary":"Delete Lead","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:leads"]}]}},"/v1/leads":{"get":{"operationId":"lead.list","tags":["Lead"],"summary":"List Leads","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"contactId","required":false,"schema":{"type":"integer","description":"Filter by contact ID"},"description":"Filter by contact ID"},{"in":"query","name":"phaseId","required":false,"schema":{"type":"integer","description":"Lead pipeline phase ID. Built-in phases: 1=New Inquiry, 2=Follow Up, 3=Meeting, 4=Estimate, 5=Connected, 6=Won. Accounts may also define custom phases with other IDs (see the Lead Phase resource)."},"description":"Lead pipeline phase ID. Built-in phases: 1=New Inquiry, 2=Follow Up, 3=Meeting, 4=Estimate, 5=Connected, 6=Won. Accounts may also define custom phases with other IDs (see the Lead Phase resource)."}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Lead"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:leads"]}]},"post":{"operationId":"lead.create","tags":["Lead"],"summary":"Create Lead","responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Lead"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:leads"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Lead name"},"contactId":{"type":"integer","description":"Contact ID"},"description":{"type":"string","description":"Lead description"},"budget":{"type":"number","description":"Lead budget"},"type":{"type":"string","description":"Project type label"},"serviceTypeId":{"type":"integer","description":"Service type ID"},"sourceCode":{"type":"integer","description":"Source code"},"source":{"type":"string","description":"Source label"},"expectedStartDate":{"type":"string","description":"Expected start date"},"addresses":{"type":"array","description":"Upsert addresses. Omit id to create; include id to update.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Address ID — omit to create, include to update"},"address":{"type":"object","description":"Address fields","properties":{"name":{"type":"string","description":"Label for this address — typically the site or recipient name"},"address":{"type":"string","description":"Address line 1"},"address2":{"type":"string","description":"Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"zip":{"type":"string","description":"Postal code"},"country":{"type":"string","description":"Country"}},"required":["name"]}}}},"phaseId":{"type":"integer","description":"Lead pipeline phase ID. Built-in phases: 1=New Inquiry, 2=Follow Up, 3=Meeting, 4=Estimate, 5=Connected, 6=Won. Accounts may also define custom phases with other IDs (see the Lead Phase resource). Omit to use the company default phase."}}}}}}}},"/v1/leads/{id}/convertToProject":{"post":{"operationId":"lead.convertToProject","tags":["Lead"],"summary":"Convert lead to project","description":"Creates a project from this lead and marks the lead Won. The lead must be in status Won or Current and must not already be converted.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"projectId":{"type":"integer","description":"ID of the created project"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:projects","write:leads"]}]}},"/v1/leads/{id}/retire":{"post":{"operationId":"lead.retire","tags":["Lead"],"summary":"Retire lead","description":"Archives this lead. Clients that are no longer referenced by another live lead or project are archived along with it, and reactivating the lead does not unarchive them. Won leads cannot be retired.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Lead"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:leads"]}]}},"/v1/leads/{id}/reactivate":{"post":{"operationId":"lead.reactivate","tags":["Lead"],"summary":"Reactivate lead","description":"Restores a retired lead to an active status. Clients archived by the original retire are not unarchived.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Lead"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:leads"]}]}},"/v1/leads/{id}/updatePhase":{"post":{"operationId":"lead.updatePhase","tags":["Lead"],"summary":"Update lead phase","description":"Moves this lead to a different pipeline phase.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Lead"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:leads"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phaseId":{"type":"integer","description":"Lead pipeline phase ID. Built-in phases: 1=New Inquiry, 2=Follow Up, 3=Meeting, 4=Estimate, 5=Connected, 6=Won. Accounts may also define custom phases with other IDs (see the Lead Phase resource)."}},"required":["phaseId"]}}}}}},"/v1/lead-phases":{"get":{"operationId":"lead-phase.list","tags":["Lead Phase"],"summary":"List Lead Phases","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LeadPhase"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:leads"]}]}},"/v1/milestones/{id}":{"get":{"operationId":"milestone.get","tags":["Milestone"],"summary":"Get Milestone","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Milestone"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:schedule"]}]},"patch":{"operationId":"milestone.update","tags":["Milestone"],"summary":"Update Milestone","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Milestone"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:schedule"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"parentId":{"type":"integer","description":"Parent ID (project or lead)"},"parentType":{"type":"string","description":"Parent type","enum":["project","inquiry"]},"name":{"type":"string","description":"Milestone name"},"description":{"type":"string","description":"Milestone description"},"location":{"type":"string","description":"Milestone location"},"color":{"type":"string","description":"Display color"},"startDate":{"type":"number","description":"Start date (epoch ms)"},"dueDate":{"type":"number","description":"Due date (epoch ms)"},"wholeDay":{"type":"boolean","description":"Whole-day flag"},"position":{"type":"integer","description":"Display order"},"status":{"type":"string","description":"Milestone status","enum":["OPEN","COMPLETED"]},"milestoneType":{"type":"string","description":"Milestone type","enum":["PHASE","ITEM","CHECKPOINT"]},"parentMilestoneId":{"type":"string","description":"Parent milestone ID"},"timelineId":{"type":"integer","description":"Timeline ID"}},"required":["parentId","parentType"]}}}}},"delete":{"operationId":"milestone.delete","tags":["Milestone"],"summary":"Delete Milestone","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:schedule"]}]}},"/v1/projects/{projectId}/milestones":{"get":{"operationId":"milestone.list","tags":["Milestone"],"summary":"List project milestones","description":"Additional filtering is not supported.","parameters":[{"in":"path","name":"projectId","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Milestone"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:schedule"]}]},"post":{"operationId":"milestone.create","tags":["Milestone"],"summary":"Create project milestone","parameters":[{"in":"path","name":"projectId","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Milestone"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:schedule"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Milestone name"},"description":{"type":"string","description":"Milestone description"},"location":{"type":"string","description":"Milestone location"},"color":{"type":"string","description":"Display color (hex or token)"},"startDate":{"type":"number","description":"Start date (epoch ms)"},"dueDate":{"type":"number","description":"Due date (epoch ms)"},"wholeDay":{"type":"boolean","description":"Whole-day flag"},"position":{"type":"integer","description":"Display order within parent"},"status":{"type":"string","description":"Milestone status","enum":["OPEN","COMPLETED"]},"milestoneType":{"type":"string","description":"Milestone type","enum":["PHASE","ITEM","CHECKPOINT"]},"parentMilestoneId":{"type":"string","description":"Parent milestone ID (for sub-milestones)"},"timelineId":{"type":"integer","description":"Timeline ID (optional)"}},"required":["name"]}}}}}},"/v1/leads/{leadId}/milestones":{"get":{"operationId":"milestone.list.1","tags":["Milestone"],"summary":"List lead milestones","description":"Additional filtering is not supported.","parameters":[{"in":"path","name":"leadId","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Milestone"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:schedule"]}]},"post":{"operationId":"milestone.create.1","tags":["Milestone"],"summary":"Create lead milestone","parameters":[{"in":"path","name":"leadId","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Milestone"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:schedule"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Milestone name"},"description":{"type":"string","description":"Milestone description"},"location":{"type":"string","description":"Milestone location"},"color":{"type":"string","description":"Display color (hex or token)"},"startDate":{"type":"number","description":"Start date (epoch ms)"},"dueDate":{"type":"number","description":"Due date (epoch ms)"},"wholeDay":{"type":"boolean","description":"Whole-day flag"},"position":{"type":"integer","description":"Display order within parent"},"status":{"type":"string","description":"Milestone status","enum":["OPEN","COMPLETED"]},"milestoneType":{"type":"string","description":"Milestone type","enum":["PHASE","ITEM","CHECKPOINT"]},"parentMilestoneId":{"type":"string","description":"Parent milestone ID (for sub-milestones)"},"timelineId":{"type":"integer","description":"Timeline ID (optional)"}},"required":["name"]}}}}}},"/v1/daily-logs/{id}":{"get":{"operationId":"daily-log.get","tags":["Daily Log"],"summary":"Get Daily Log","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/DailyLog"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:daily-logs"]}]},"patch":{"operationId":"daily-log.update","tags":["Daily Log"],"summary":"Update Daily Log","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/DailyLog"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:daily-logs"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"integer","description":"Associated project ID"},"content":{"type":"string","description":"Free-text log body"},"logDate":{"type":"number","description":"Log date (epoch ms)"},"logEndDate":{"type":"number","description":"Log end date (epoch ms)"}}}}}}},"delete":{"operationId":"daily-log.delete","tags":["Daily Log"],"summary":"Delete Daily Log","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:daily-logs"]}]}},"/v1/daily-logs":{"get":{"operationId":"daily-log.list","tags":["Daily Log"],"summary":"List Daily Logs","description":"Returns all daily logs, optionally filtered by projectId. Filtering by date range is not supported.","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"projectId","required":false,"schema":{"type":"integer","description":"Filter to daily logs for this project only"},"description":"Filter to daily logs for this project only"}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DailyLog"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:daily-logs"]}]},"post":{"operationId":"daily-log.create","tags":["Daily Log"],"summary":"Create Daily Log","responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/DailyLog"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:daily-logs"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"integer","description":"Associated project ID"},"content":{"type":"string","description":"Free-text log body"},"logDate":{"type":"number","description":"Log date (epoch ms)"},"logEndDate":{"type":"number","description":"Log end date (epoch ms)"}},"required":["projectId"]}}}}}},"/v1/projects/{projectId}/punchlist":{"get":{"operationId":"punchlist.getPunchlistByProject","tags":["Punchlist"],"summary":"Get project punchlist","parameters":[{"in":"path","name":"projectId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Punchlist"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:tasks"]}]}},"/v1/punchlists/{id}":{"patch":{"operationId":"punchlist.update","tags":["Punchlist"],"summary":"Update Punchlist","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Punchlist"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:tasks"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"visibility":{"type":"string","description":"Visibility","enum":["Private","Shared"]}}}}}}}},"/v1/tasks/{id}":{"get":{"operationId":"task.get","tags":["Task"],"summary":"Get Task","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Task"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:tasks"]}]},"patch":{"operationId":"task.update","tags":["Task"],"summary":"Update Task","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Task"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:tasks"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Task title"},"description":{"type":"string","description":"Task description"},"dueDate":{"type":"number","description":"Due date (epoch ms)"},"done":{"type":"boolean","description":"Completed flag"},"visibility":{"type":"string","description":"Visibility","enum":["Private","Shared"]},"photosRequired":{"type":"boolean","description":"Photos required flag"},"milestoneId":{"type":"integer","description":"Milestone ID (null to clear the milestone link)"}}}}}}},"delete":{"operationId":"task.delete","tags":["Task"],"summary":"Delete Task","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:tasks"]}]}},"/v1/projects/{projectId}/tasks":{"get":{"operationId":"task.list","tags":["Task"],"summary":"List project tasks","description":"Additional filtering (e.g. by completion state or due date) is not supported.","parameters":[{"in":"path","name":"projectId","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Task"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:tasks"]}]},"post":{"operationId":"task.create","tags":["Task"],"summary":"Create project task","parameters":[{"in":"path","name":"projectId","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Task"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:tasks"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Task title"},"description":{"type":"string","description":"Task description"},"dueDate":{"type":"number","description":"Due date (epoch ms)"},"done":{"type":"boolean","description":"Completed flag"},"visibility":{"type":"string","description":"Visibility","enum":["Private","Shared"]},"photosRequired":{"type":"boolean","description":"Photos required flag"},"punchlistId":{"type":"integer","description":"Punchlist ID — when set, creates a punchlist task"},"milestoneId":{"type":"integer","description":"Milestone ID to link this task to"}},"required":["title"]}}}}}},"/v1/leads/{leadId}/tasks":{"get":{"operationId":"task.list.1","tags":["Task"],"summary":"List lead tasks","description":"Additional filtering (e.g. by completion state or due date) is not supported.","parameters":[{"in":"path","name":"leadId","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Task"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:tasks"]}]},"post":{"operationId":"task.create.1","tags":["Task"],"summary":"Create lead task","parameters":[{"in":"path","name":"leadId","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Task"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:tasks"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Task title"},"description":{"type":"string","description":"Task description"},"dueDate":{"type":"number","description":"Due date (epoch ms)"},"done":{"type":"boolean","description":"Completed flag"},"visibility":{"type":"string","description":"Visibility","enum":["Private","Shared"]},"photosRequired":{"type":"boolean","description":"Photos required flag"},"punchlistId":{"type":"integer","description":"Punchlist ID — when set, creates a punchlist task"},"milestoneId":{"type":"integer","description":"Milestone ID to link this task to"}},"required":["title"]}}}}}},"/v1/punchlists/{punchlistId}/tasks":{"get":{"operationId":"task.list.2","tags":["Task"],"summary":"List punchlist tasks","description":"Additional filtering (e.g. by completion state or due date) is not supported.","parameters":[{"in":"path","name":"punchlistId","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Task"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:tasks"]}]}},"/v1/files":{"get":{"operationId":"file.list","tags":["File"],"summary":"List Files","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"contextId","required":true,"schema":{"type":"integer","description":"ID of the entity that owns this file (e.g. a project ID). Combined with contextType to scope the lookup."},"description":"ID of the entity that owns this file (e.g. a project ID). Combined with contextType to scope the lookup."},{"in":"query","name":"contextType","required":true,"schema":{"type":"string","description":"Type of the entity that owns this file.","enum":["Company","Project","Inquiry","RoomBoard"]},"description":"Type of the entity that owns this file."},{"in":"query","name":"parentId","required":false,"schema":{"type":"integer","description":"ID of the parent folder to list contents of. Omit to list root-level files and folders."},"description":"ID of the parent folder to list contents of. Omit to list root-level files and folders."}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/File"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:files"]}]}},"/v1/files/{id}":{"get":{"operationId":"file.get","tags":["File"],"summary":"Get File","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"query","name":"contextId","required":true,"schema":{"type":"integer","description":"ID of the entity that owns this file (e.g. a project ID). Combined with contextType to scope the lookup."},"description":"ID of the entity that owns this file (e.g. a project ID). Combined with contextType to scope the lookup."},{"in":"query","name":"contextType","required":true,"schema":{"type":"string","description":"Type of the entity that owns this file.","enum":["Company","Project","Inquiry","RoomBoard"]},"description":"Type of the entity that owns this file."}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/File"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:files"]}]},"patch":{"operationId":"file.update","tags":["File"],"summary":"Update File","description":"Rename a file or folder, or toggle its starred flag. Only name and starred are editable.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/File"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:files"]}]},"delete":{"operationId":"file.delete","tags":["File"],"summary":"Delete File","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:files"]}]}},"/v1/files/{id}/archive":{"post":{"operationId":"file.archive","tags":["File"],"summary":"Archive File","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"archived":{"type":"boolean","description":"Whether the file is archived"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:files"]}]}},"/v1/files/{id}/unarchive":{"post":{"operationId":"file.unarchive","tags":["File"],"summary":"Unarchive File","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"archived":{"type":"boolean","description":"Whether the file is archived"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:files"]}]}},"/v1/files/folders":{"post":{"operationId":"file.createFolder","tags":["File"],"summary":"CreateFolder File","responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/File"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:files"]}]}},"/v1/files/copy":{"post":{"operationId":"file.copy","tags":["File"],"summary":"Copy File","responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"copied":{"type":"boolean","description":"Whether the files were copied"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:files"]}]}},"/v1/files/move":{"post":{"operationId":"file.move","tags":["File"],"summary":"Move File","responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"moved":{"type":"boolean","description":"Whether the files were moved"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:files"]}]}},"/v1/files/upload":{"post":{"operationId":"file.upload","tags":["File"],"summary":"Upload File","description":"Upload a file via multipart/form-data. The file is stored and registered against a parent context; contextType must be Company, Project, or Inquiry (RoomBoard is not supported for uploads). SVG files are rejected.","responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/File"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:files"]}]}},"/v1/team-members/{id}":{"get":{"operationId":"team-member.get","tags":["Team Member"],"summary":"Get Team Member","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/TeamMember"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:team-members"]}]},"patch":{"operationId":"team-member.update","tags":["Team Member"],"summary":"Update Team Member","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/TeamMember"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:team-members"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"roleId":{"type":"string","description":"Role ID"},"firstName":{"type":"string","description":"First name"},"lastName":{"type":"string","description":"Last name"},"email":{"type":"string","description":"Email"},"phone":{"type":"string","description":"Phone"},"website":{"type":"string","description":"Website"},"notes":{"type":"string","description":"Notes"},"address":{"type":"object","description":"Address"}}}}}}},"delete":{"operationId":"team-member.delete","tags":["Team Member"],"summary":"Delete Team Member","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:team-members"]}]}},"/v1/team-members":{"get":{"operationId":"team-member.list","tags":["Team Member"],"summary":"List team members","description":"Search by name, email, or phone via the query param.","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"query","required":false,"schema":{"type":"string","description":"Search team members by name, email, or phone"},"description":"Search team members by name, email, or phone"}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TeamMember"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:team-members"]}]},"post":{"operationId":"team-member.create","tags":["Team Member"],"summary":"Create Team Member","responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/TeamMember"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:team-members"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email address"},"firstName":{"type":"string","description":"First name"},"lastName":{"type":"string","description":"Last name"},"roleId":{"type":"string","description":"Role ID"},"phone":{"type":"string","description":"Phone"},"note":{"type":"string","description":"Invitation note"}},"required":["email"]}}}}}},"/v1/subcontractors/{id}":{"get":{"operationId":"subcontractor.get","tags":["Subcontractor"],"summary":"Get Subcontractor","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Subcontractor"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:subcontractors"]}]},"patch":{"operationId":"subcontractor.update","tags":["Subcontractor"],"summary":"Update Subcontractor","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Subcontractor"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:subcontractors"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"firstName":{"type":"string","description":"First name"},"lastName":{"type":"string","description":"Last name"},"email":{"type":"string","description":"Email"},"phone":{"type":"string","description":"Phone"},"roleId":{"type":"string","description":"Role ID"},"website":{"type":"string","description":"Website"},"description":{"type":"string","description":"Description"},"notes":{"type":"string","description":"Notes"},"address":{"type":"object","description":"Address"},"subInfo":{"type":"object","description":"Subcontractor info (companyName, trades)"}}}}}}},"delete":{"operationId":"subcontractor.delete","tags":["Subcontractor"],"summary":"Delete Subcontractor","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:subcontractors"]}]}},"/v1/subcontractors":{"get":{"operationId":"subcontractor.list","tags":["Subcontractor"],"summary":"List subcontractors","description":"Search by name, email, phone, company, or trade via the query param.","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"query","required":false,"schema":{"type":"string","description":"Search subcontractors by name, email, phone, company, or trade"},"description":"Search subcontractors by name, email, phone, company, or trade"}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Subcontractor"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:subcontractors"]}]},"post":{"operationId":"subcontractor.create","tags":["Subcontractor"],"summary":"Create Subcontractor","responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Subcontractor"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:subcontractors"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email address"},"firstName":{"type":"string","description":"First name"},"lastName":{"type":"string","description":"Last name"},"phone":{"type":"string","description":"Phone"},"roleId":{"type":"string","description":"Role ID"},"subInfo":{"type":"object","description":"Subcontractor info (companyName, trades)"},"website":{"type":"string","description":"Website"},"notes":{"type":"string","description":"Notes"},"address":{"type":"object","description":"Address"}}}}}}}},"/v1/subcontractor-trades":{"get":{"operationId":"subcontractor-trade.list","tags":["Subcontractor Trade"],"summary":"List Subcontractor Trades","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SubcontractorTrade"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:subcontractors"]}]}},"/v1/vendors/{id}":{"get":{"operationId":"vendor.get","tags":["Vendor"],"summary":"Get Vendor","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Vendor"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:vendors"]}]},"patch":{"operationId":"vendor.update","tags":["Vendor"],"summary":"Update Vendor","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Vendor"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:vendors"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"companyName":{"type":"string","description":"Company name"},"firstName":{"type":"string","description":"First name"},"lastName":{"type":"string","description":"Last name"},"email":{"type":"string","description":"Email"},"phoneNumber":{"type":"string","description":"Phone number"},"address":{"type":"string","description":"Address"},"address2":{"type":"string","description":"Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"zip":{"type":"string","description":"Zip code"},"country":{"type":"string","description":"Country"},"website":{"type":"string","description":"Website"},"notes":{"type":"string","description":"Notes"},"accountNumber":{"type":"string","description":"Account number"},"ein":{"type":"string","description":"Employer Identification Number"},"faxNumber":{"type":"string","description":"Fax number"},"type":{"type":"string","description":"Vendor type"},"description":{"type":"string","description":"Description"},"defaultPaymentTerms":{"type":"integer","description":"Default payment terms (days)"},"chargesTax":{"type":"boolean","description":"Whether the vendor charges tax"}}}}}}}},"/v1/vendors":{"get":{"operationId":"vendor.list","tags":["Vendor"],"summary":"List vendors","description":"Filter by companyName, archived, or tags. Archived vendors are included unless you explicitly pass archived=false.","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"companyName","required":false,"schema":{"type":"string","description":"Filter by company name (partial match)"},"description":"Filter by company name (partial match)"},{"in":"query","name":"archived","required":false,"schema":{"type":"boolean","description":"Filter by archived state (true/false)"},"description":"Filter by archived state (true/false)"},{"in":"query","name":"tags","required":false,"schema":{"type":"string","description":"Filter by tag IDs (comma-separated)"},"description":"Filter by tag IDs (comma-separated)"}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Vendor"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:vendors"]}]},"post":{"operationId":"vendor.create","tags":["Vendor"],"summary":"Create Vendor","responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Vendor"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:vendors"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"companyName":{"type":"string","description":"Company name"},"firstName":{"type":"string","description":"First name"},"lastName":{"type":"string","description":"Last name"},"email":{"type":"string","description":"Email"},"phoneNumber":{"type":"string","description":"Phone number"},"address":{"type":"string","description":"Address"},"address2":{"type":"string","description":"Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"zip":{"type":"string","description":"Zip code"},"country":{"type":"string","description":"Country"},"website":{"type":"string","description":"Website"},"notes":{"type":"string","description":"Notes"},"accountNumber":{"type":"string","description":"Account number"},"ein":{"type":"string","description":"Employer Identification Number"},"faxNumber":{"type":"string","description":"Fax number"},"type":{"type":"string","description":"Vendor type"},"description":{"type":"string","description":"Description"},"defaultPaymentTerms":{"type":"integer","description":"Default payment terms (days)"},"chargesTax":{"type":"boolean","description":"Whether the vendor charges tax"}},"required":["companyName"]}}}}}},"/v1/vendors/{id}/archive":{"post":{"operationId":"vendor.archive","tags":["Vendor"],"summary":"Archive Vendor","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Vendor"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:vendors"]}]}},"/v1/vendors/{id}/unarchive":{"post":{"operationId":"vendor.unarchive","tags":["Vendor"],"summary":"Unarchive Vendor","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Vendor"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:vendors"]}]}},"/v1/contacts/{id}":{"get":{"operationId":"contact.get","tags":["Contact"],"summary":"Get Contact","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Contact"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:contacts"]}]},"patch":{"operationId":"contact.update","tags":["Contact"],"summary":"Update Contact","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Contact"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:contacts"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Contact name"},"companyName":{"type":"string","description":"Company name"},"email":{"type":"string","description":"Primary email"},"email2":{"type":"string","description":"Secondary email"},"phone":{"type":"string","description":"Primary phone"},"phone2":{"type":"string","description":"Secondary phone"},"address":{"type":"object","description":"Address"},"notes":{"type":"string","description":"Notes"},"contactGroupName":{"type":"string","description":"Contact group name (creates or assigns to existing group)"}}}}}}},"delete":{"operationId":"contact.delete","tags":["Contact"],"summary":"Delete Contact","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:contacts"]}]}},"/v1/contacts":{"get":{"operationId":"contact.list","tags":["Contact"],"summary":"List contacts","description":"Search by name, email, or phone via searchText.","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"searchText","required":false,"schema":{"type":"string","description":"Search contacts by name, email, or phone (partial match). Email/phone matching requires Elasticsearch (enabled in production); the count reflects the same search."},"description":"Search contacts by name, email, or phone (partial match). Email/phone matching requires Elasticsearch (enabled in production); the count reflects the same search."}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:contacts"]}]},"post":{"operationId":"contact.create","tags":["Contact"],"summary":"Create Contact","description":"Create a contact. Passing contactGroupName creates or assigns the contact group (also called a CRM account) with that name.","responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Contact"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:contacts"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Contact name"},"companyName":{"type":"string","description":"Company name"},"email":{"type":"string","description":"Primary email"},"email2":{"type":"string","description":"Secondary email"},"phone":{"type":"string","description":"Primary phone"},"phone2":{"type":"string","description":"Secondary phone"},"address":{"type":"object","description":"Address"},"notes":{"type":"string","description":"Notes"},"contactGroupName":{"type":"string","description":"Contact group name (creates or assigns to existing group)"}},"required":["name"]}}}}}},"/v1/contact-groups/{id}":{"get":{"operationId":"contact-group.get","tags":["Contact Group"],"summary":"Get Contact Group","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/ContactGroup"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:contacts"]}]},"patch":{"operationId":"contact-group.update","tags":["Contact Group"],"summary":"Update Contact Group","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/ContactGroup"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:contacts"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"contactGroupType":{"type":"string","enum":["HOMEOWNER","BUSINESS"]},"archived":{"type":"boolean"}}}}}}},"delete":{"operationId":"contact-group.delete","tags":["Contact Group"],"summary":"Delete Contact Group","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:contacts"]}]}},"/v1/contact-groups":{"get":{"operationId":"contact-group.list","tags":["Contact Group"],"summary":"List contact groups","description":"Filter by contactGroupType or archived.","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"contactGroupType","required":false,"schema":{"type":"string","description":"Filter by contact group type","enum":["HOMEOWNER","BUSINESS"]},"description":"Filter by contact group type"},{"in":"query","name":"archived","required":false,"schema":{"type":"boolean","description":"Filter by archived state (true/false)"},"description":"Filter by archived state (true/false)"}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ContactGroup"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:contacts"]}]}},"/v1/contact-groups/{contactGroupId}/contacts":{"post":{"operationId":"contact-group-contact.create","tags":["Contact Group Contact"],"summary":"Create Contact Group Contact","parameters":[{"in":"path","name":"contactGroupId","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/ContactGroupContact"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:contacts"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactId":{"type":"string","description":"Contact ID to add"},"contactType":{"type":"string","description":"Contact type (default: CLIENT)"},"contactLevel":{"type":"string","description":"Contact level (default: PRIMARY)","enum":["PRIMARY","SECONDARY"]},"contactGroupName":{"type":"string","description":"Contact group name"},"contactGroupType":{"type":"string","description":"Contact group type","enum":["HOMEOWNER","BUSINESS"]},"clientInput":{"type":"object","description":"Client data for creating a new contact"}}}}}}}},"/v1/contact-groups/{contactGroupId}/contacts/{connectionId}":{"patch":{"operationId":"contact-group-contact.update","tags":["Contact Group Contact"],"summary":"Update Contact Group Contact","parameters":[{"in":"path","name":"contactGroupId","required":true,"schema":{"type":"string"}},{"in":"path","name":"connectionId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/ContactGroupContact"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:contacts"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactLevel":{"type":"string","enum":["PRIMARY","SECONDARY"]}}}}}}},"delete":{"operationId":"contact-group-contact.delete","tags":["Contact Group Contact"],"summary":"Delete Contact Group Contact","parameters":[{"in":"path","name":"contactGroupId","required":true,"schema":{"type":"string"}},{"in":"path","name":"connectionId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:contacts"]}]}},"/v1/entity-assignments":{"post":{"operationId":"entity-assignment.create","tags":["Entity Assignment"],"summary":"Assign entity","responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/EntityAssignment"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:entity-assignments"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"entityType":{"type":"string","description":"Type of the entity being assigned — project, lead, task, or milestone","enum":["Houzz_pro_project","Houzz_pro_inquiry","Houzz_ivy_task","Houzz_ivy_milestone"]},"entityId":{"type":"string","description":"ID of the entity being assigned"},"assigneeInput":{"type":"array","description":"Array of { assigneeId, assigneeType } objects"}},"required":["entityType","entityId","assigneeInput"]}}}}},"get":{"operationId":"entity-assignment.listAssignees","tags":["Entity Assignment"],"summary":"ListAssignees Entity Assignment","parameters":[{"in":"query","name":"entityType","required":true,"schema":{"type":"string","description":"Type of the entities to fetch assignees for.","enum":["Houzz_pro_project","Houzz_pro_inquiry","Houzz_ivy_task","Houzz_ivy_milestone"]},"description":"Type of the entities to fetch assignees for."},{"in":"query","name":"entityIds","required":true,"schema":{"type":"array","description":"IDs of the entities to fetch assignees for. Repeat the param for multiple IDs.","items":{"type":"string"}},"description":"IDs of the entities to fetch assignees for. Repeat the param for multiple IDs."}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"entityType":{"type":"string","description":"Entity type"},"entityId":{"type":"string","description":"Entity ID"},"assignees":{"type":"array","description":"Assignees for this entity"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:entity-assignments"]}]}},"/v1/entity-assignments/candidates":{"get":{"operationId":"entity-assignment.listCandidates","tags":["Entity Assignment"],"summary":"ListCandidates Entity Assignment","parameters":[{"in":"query","name":"entityType","required":true,"schema":{"type":"string","description":"Type of the entity to fetch assignee candidates for.","enum":["Houzz_pro_project","Houzz_pro_inquiry","Houzz_ivy_task","Houzz_ivy_milestone"]},"description":"Type of the entity to fetch assignee candidates for."},{"in":"query","name":"entityId","required":false,"schema":{"type":"string","description":"ID of the entity to fetch assignee candidates for."},"description":"ID of the entity to fetch assignee candidates for."},{"in":"query","name":"parentEntityType","required":false,"schema":{"type":"string","description":"Type of the entity's parent (e.g. the project a milestone belongs to). Narrows the candidate pool."},"description":"Type of the entity's parent (e.g. the project a milestone belongs to). Narrows the candidate pool."},{"in":"query","name":"parentEntityId","required":false,"schema":{"type":"string","description":"ID of the parent entity."},"description":"ID of the parent entity."}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/EntityAssignment"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:entity-assignments"]}]}},"/v1/entity-assignments/assigned-entities":{"get":{"operationId":"entity-assignment.listAssignedEntities","tags":["Entity Assignment"],"summary":"ListAssignedEntities Entity Assignment","parameters":[{"in":"query","name":"assigneeId","required":true,"schema":{"type":"string","description":"ID of the assignee to look up entities for."},"description":"ID of the assignee to look up entities for."},{"in":"query","name":"assigneeType","required":true,"schema":{"type":"string","description":"Type of the assignee.","enum":["USER","CONTACT","PENDING_TEAMMATE"]},"description":"Type of the assignee."}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"entityType":{"type":"string","description":"Entity type"},"entityIds":{"type":"array","description":"IDs of entities of this type assigned to the assignee","items":{"type":"string"}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:entity-assignments"]}]}},"/v1/entity-assignments/assigned-users":{"get":{"operationId":"entity-assignment.listFilterOptions","tags":["Entity Assignment"],"summary":"ListFilterOptions Entity Assignment","parameters":[{"in":"query","name":"entityType","required":true,"schema":{"type":"string","description":"Type of the entities to fetch assignee filter options for.","enum":["Houzz_pro_project","Houzz_pro_inquiry","Houzz_ivy_task","Houzz_ivy_milestone"]},"description":"Type of the entities to fetch assignee filter options for."},{"in":"query","name":"entityIds","required":false,"schema":{"type":"array","description":"IDs of the entities to fetch assignee filter options for. Repeat the param for multiple IDs.","items":{"type":"string"}},"description":"IDs of the entities to fetch assignee filter options for. Repeat the param for multiple IDs."}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/EntityAssignment"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:entity-assignments"]}]}},"/v1/webhookSubscriptions":{"get":{"operationId":"webhook-subscription.list","tags":["Webhook Subscription"],"summary":"List Webhook Subscriptions","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"status","required":false,"schema":{"type":"string","description":"Filter by subscription status. Omit to return subscriptions in any status.","enum":["active","paused","disabled"]},"description":"Filter by subscription status. Omit to return subscriptions in any status."}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookSubscription"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":[]}]},"post":{"operationId":"webhook-subscription.create","tags":["Webhook Subscription"],"summary":"Create Webhook Subscription","responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"id":{"type":"integer","description":"Subscription ID"},"companyId":{"type":"integer","description":"Company ID this subscription belongs to"},"url":{"type":"string","description":"Delivery URL"},"status":{"type":"string","description":"Subscription status (active, paused, disabled)"},"description":{"type":"string","description":"Human-readable label"},"maxAttempts":{"type":"integer","description":"Maximum delivery attempts"},"headers":{"type":"object","description":"Custom HTTP headers for deliveries"},"consecutiveFailures":{"type":"integer","description":"Number of consecutive delivery failures"},"createdBy":{"type":"integer","description":"User ID who created this subscription"},"createdAt":{"type":"string","description":"ISO 8601 creation timestamp"},"updatedAt":{"type":"string","description":"ISO 8601 last-update timestamp"},"triggers":{"type":"array","description":"Active triggers for this subscription","items":{"type":"object","properties":{"id":{"type":"integer","description":"Trigger ID"},"resourceName":{"type":"string","description":"Resource name (e.g. \"client\")"},"eventType":{"type":"string","description":"Event type (create, update, delete)"},"isActive":{"type":"boolean","description":"Whether this trigger is active for this subscription"}}}},"secret":{"type":"string","description":"HMAC-SHA256 signing secret — only returned on creation"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"HTTPS URL to deliver webhook payloads to"},"description":{"type":"string","description":"Human-readable label for this subscription"},"maxAttempts":{"type":"integer","description":"Maximum delivery attempts, including retries on 429/5xx/timeout (default 6)"},"headers":{"type":"object","description":"Custom HTTP headers to include with deliveries (key/value pairs)"},"triggers":{"type":"array","description":"Triggers to subscribe to"}},"required":["url"]}}}}}},"/v1/webhookSubscriptions/{id}":{"get":{"operationId":"webhook-subscription.get","tags":["Webhook Subscription"],"summary":"Get Webhook Subscription","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/WebhookSubscription"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":[]}]},"patch":{"operationId":"webhook-subscription.update","tags":["Webhook Subscription"],"summary":"Update Webhook Subscription","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/WebhookSubscription"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"HTTPS URL to deliver webhook payloads to"},"status":{"type":"string","description":"Subscription status","enum":["active","paused","disabled"]},"description":{"type":"string","description":"Human-readable label for this subscription"},"maxAttempts":{"type":"integer","description":"Maximum delivery attempts, including retries on 429/5xx/timeout"},"headers":{"type":"object","description":"Custom HTTP headers to include with deliveries (key/value pairs)"},"triggers":{"type":"array","description":"Full set of triggers (only applied when updateTriggers is true)"},"updateTriggers":{"type":"boolean","description":"When true, replaces all triggers with the provided triggers array"}}}}}}},"delete":{"operationId":"webhook-subscription.delete","tags":["Webhook Subscription"],"summary":"Delete Webhook Subscription","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"boolean"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":[]}]}},"/v1/webhookTriggers":{"get":{"operationId":"webhook-trigger.list","tags":["Webhook Trigger"],"summary":"List Webhook Triggers","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookTrigger"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":[]}]}},"/v1/projects/{projectId}/notes":{"get":{"operationId":"note.list","tags":["Note"],"summary":"List project notes","description":"Returns active notes by default. Pass archived=true to return archived notes instead.","parameters":[{"in":"path","name":"projectId","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"archived","required":false,"schema":{"type":"boolean","description":"Return archived notes instead of active ones"},"description":"Return archived notes instead of active ones"}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Note"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:projects"]},{"bearerAuth":["read:leads"]}]},"post":{"operationId":"note.create","tags":["Note"],"summary":"Create project note","parameters":[{"in":"path","name":"projectId","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Note"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:projects"]},{"bearerAuth":["write:leads"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","description":"Note body text"},"type":{"type":"string","description":"Note type","enum":["DEFAULT","CALL_LOG"]},"subType":{"type":"string","description":"Note sub-type (used with CALL_LOG)","enum":["NOT_AVAILABLE","GOOD_DISCUSSION","NO_ANSWER","CALL_LATER","NOT_INTERESTED"]},"source":{"type":"string","description":"Originating system; defaults to \"api\" when omitted"}},"required":["content"]}}}}}},"/v1/leads/{leadId}/notes":{"get":{"operationId":"note.list.1","tags":["Note"],"summary":"List lead notes","description":"Returns active notes by default. Pass archived=true to return archived notes instead.","parameters":[{"in":"path","name":"leadId","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":20,"maximum":300}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer","default":0}},{"in":"query","name":"archived","required":false,"schema":{"type":"boolean","description":"Return archived notes instead of active ones"},"description":"Return archived notes instead of active ones"}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","limit","offset"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Note"}},"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:projects"]},{"bearerAuth":["read:leads"]}]},"post":{"operationId":"note.create.1","tags":["Note"],"summary":"Create lead note","parameters":[{"in":"path","name":"leadId","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Note"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:projects"]},{"bearerAuth":["write:leads"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","description":"Note body text"},"type":{"type":"string","description":"Note type","enum":["DEFAULT","CALL_LOG"]},"subType":{"type":"string","description":"Note sub-type (used with CALL_LOG)","enum":["NOT_AVAILABLE","GOOD_DISCUSSION","NO_ANSWER","CALL_LATER","NOT_INTERESTED"]},"source":{"type":"string","description":"Originating system; defaults to \"api\" when omitted"}},"required":["content"]}}}}}},"/v1/notes/{id}":{"get":{"operationId":"note.get","tags":["Note"],"summary":"Get Note","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Note"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["read:projects"]},{"bearerAuth":["read:leads"]}]},"patch":{"operationId":"note.update","tags":["Note"],"summary":"Update Note","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Note"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["write:projects"]},{"bearerAuth":["write:leads"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","description":"Note body text"},"type":{"type":"string","description":"Note type","enum":["DEFAULT","CALL_LOG"]},"subType":{"type":"string","description":"Note sub-type (used with CALL_LOG)","enum":["NOT_AVAILABLE","GOOD_DISCUSSION","NO_ANSWER","CALL_LATER","NOT_INTERESTED"]},"source":{"type":"string","description":"Originating system"}}}}}}}},"/v1/notes/{id}/archive":{"post":{"operationId":"note.archive","tags":["Note"],"summary":"Archive Note","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Note"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}},"security":[{"bearerAuth":["admin:projects"]},{"bearerAuth":["admin:leads"]}]}}},"components":{"securitySchemes":{"bearerAuth":{"type":"oauth2","description":"OAuth2 client credentials flow via Auth0","flows":{"clientCredentials":{"tokenUrl":"https://auth.houzz.com/oauth/token","scopes":{"read:api-metadata":"View API version and available scopes","read:projects":"View project details and list projects","write:projects":"Create and update projects","admin:projects":"Full administrative access to projects including deletion","read:leads":"View lead details and list leads","write:leads":"Create and update leads","admin:leads":"Full administrative access to leads including deletion","read:schedule":"View milestones and schedule details","write:schedule":"Create and update milestones","admin:schedule":"Full administrative access to schedule including deletion","read:daily-logs":"View daily log details and list daily logs","write:daily-logs":"Create and update daily logs","admin:daily-logs":"Full administrative access to daily logs including deletion","read:tasks":"View tasks, punchlist, and related items","write:tasks":"Create and update tasks and punchlist visibility","admin:tasks":"Full administrative access to tasks including deletion","read:files":"View file details and list files","write:files":"Upload and update files","admin:files":"Delete files","read:team-members":"View team member details and list team members","write:team-members":"Invite and update team members","admin:team-members":"Deactivate and archive team members","read:subcontractors":"View subcontractor details and list subcontractors","write:subcontractors":"Invite and update subcontractors","admin:subcontractors":"Deactivate and archive subcontractors","read:vendors":"View vendor details and list vendors","write:vendors":"Create and update vendors","admin:vendors":"Archive vendors","read:entity-assignments":"View entity assignments and assignee candidates","write:entity-assignments":"Assign and reassign entities","read:contacts":"View contact details and list contacts","write:contacts":"Create and update contacts","admin:contacts":"Delete contacts"}}}}},"schemas":{"PostalAddress":{"type":"object","properties":{"address":{"type":"string","description":"Address line 1"},"address2":{"type":"string","description":"Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"zip":{"type":"string","description":"Postal code"},"country":{"type":"string","description":"Country"}}},"CustomField":{"type":"object","properties":{"id":{"type":"integer","description":"Custom field ID"},"name":{"type":"string","description":"Field name (e.g. external_id)"},"type":{"type":"string","description":"Field type (text, checkbox, link, date, single_select, duration)"},"description":{"type":"string","description":"Field description"},"options":{"type":"array","description":"Options for single_select type","items":{"type":"string"}}}},"CustomFieldEntry":{"type":"object","properties":{"id":{"type":"integer","description":"Entry ID"},"customFieldId":{"type":"integer","description":"ID of the custom field definition"},"customableId":{"type":"integer","description":"ID of the entity this entry belongs to"},"customableType":{"type":"string","description":"Entity type"},"value":{"type":"string","description":"Stored value"},"customField":{"type":"object","description":"The custom field definition this entry is a value for","properties":{"id":{"type":"integer","description":"Custom field ID"},"name":{"type":"string","description":"Field name (e.g. external_id)"},"type":{"type":"string","description":"Field type (text, checkbox, link, date, single_select, duration)"}}}}},"Project":{"type":"object","properties":{"id":{"type":"integer","description":"Project ID"},"name":{"type":"string","description":"Project name"},"status":{"type":"object","description":"Project status","properties":{"id":{"type":"integer","description":"Status ID"},"name":{"type":"string","description":"Status name"}}},"contact":{"type":"object","description":"Associated contact","properties":{"id":{"type":"integer","description":"Contact ID"},"name":{"type":"string","description":"Contact name"}}},"owner":{"type":"object","description":"Project owner","properties":{"id":{"type":"integer","description":"Owner user ID"},"name":{"type":"string","description":"Owner full name"}}},"budget":{"type":"number","description":"Project budget"},"projectType":{"type":"integer","description":"Project type ID"},"projectTypeName":{"type":"string","description":"Project type name"},"archived":{"type":"boolean","description":"Whether the project is archived"},"notes":{"type":"string","description":"Project notes"},"createdAt":{"type":"string","description":"Creation timestamp (ISO 8601)"},"updatedAt":{"type":"string","description":"Last update timestamp (ISO 8601)"},"addresses":{"type":"array","description":"Addresses associated with this project","items":{"type":"object","properties":{"id":{"type":"integer","description":"Address ID"},"name":{"type":"string","description":"Label for this address"},"address":{"type":"string","description":"Address line 1"},"address2":{"type":"string","description":"Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"zip":{"type":"string","description":"Postal code"},"country":{"type":"string","description":"Country"}}}},"customFieldEntries":{"type":"array","description":"Custom field entries set on this project","items":{"$ref":"#/components/schemas/CustomFieldEntry"}}}},"ProjectStatus":{"type":"object","properties":{"id":{"type":"integer","description":"Status ID"},"status":{"type":"string","description":"Status name"},"isCustom":{"type":"boolean","description":"Whether this is a custom status"},"color":{"type":"string","description":"Status color","enum":["green","darkTeal","blue","teal","cyan","yellow","red","pink","purple","orange"]}}},"ProjectType":{"type":"object","properties":{"id":{"type":"string","description":"Project type ID (treat as an opaque string)"},"name":{"type":"string","description":"Project type name"}}},"Lead":{"type":"object","properties":{"id":{"type":"integer","description":"Lead ID"},"name":{"type":"string","description":"Lead name"},"description":{"type":"string","description":"Lead description"},"budget":{"type":"number","description":"Lead budget"},"type":{"type":"string","description":"Project type label"},"serviceType":{"type":"string","description":"Service type name"},"serviceTypeId":{"type":"integer","description":"Service type ID"},"phase":{"type":"object","description":"Inquiry phase","properties":{"id":{"type":"integer","description":"Phase ID"},"name":{"type":"string","description":"Phase name"},"displayName":{"type":"string","description":"Phase display name"}}},"inquirySource":{"type":"object","description":"Inquiry source","properties":{"value":{"type":"integer","description":"Source code"},"displayName":{"type":"string","description":"Source display name"}}},"contact":{"type":"object","description":"Associated contact","properties":{"id":{"type":"integer","description":"Contact ID"},"name":{"type":"string","description":"Contact name"},"email":{"type":["string","null"],"description":"Contact email. Null when the contact has no email on file."},"phone":{"type":"string","description":"Contact phone"}}},"sourceCode":{"type":"integer","description":"Source code"},"source":{"type":"string","description":"Source label"},"expectedStartDate":{"type":"string","description":"Expected start date"},"projectId":{"type":"integer","description":"Associated project ID if converted"},"isCold":{"type":"boolean","description":"Whether lead is cold"},"isUnread":{"type":"boolean","description":"Whether lead is unread"},"isSpam":{"type":"boolean","description":"Whether lead is marked as spam"},"archivedAt":{"type":"string","description":"Archive timestamp (ISO 8601)"},"createdAt":{"type":"string","description":"Creation timestamp (ISO 8601)"},"updatedAt":{"type":"string","description":"Last update timestamp (ISO 8601)"},"addresses":{"type":"array","description":"Addresses associated with this lead","items":{"type":"object","properties":{"id":{"type":"integer","description":"Address ID"},"name":{"type":"string","description":"Label for this address"},"address":{"type":"string","description":"Address line 1"},"address2":{"type":"string","description":"Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"zip":{"type":"string","description":"Postal code"},"country":{"type":"string","description":"Country"}}}},"customFieldEntries":{"type":"array","description":"Custom field entries set on this lead","items":{"$ref":"#/components/schemas/CustomFieldEntry"}}}},"LeadPhase":{"type":"object","properties":{"id":{"type":"integer","description":"Phase ID"},"name":{"type":"string","description":"Phase name"},"displayName":{"type":"string","description":"Phase display name"},"type":{"type":"string","description":"Phase type"}}},"Milestone":{"type":"object","properties":{"id":{"type":"integer","description":"Milestone ID"},"parentId":{"type":"integer","description":"Parent ID"},"parentType":{"type":"string","description":"Parent type (project or inquiry)"},"timelineId":{"type":"integer","description":"Timeline ID"},"name":{"type":"string","description":"Milestone name"},"description":{"type":"string","description":"Milestone description"},"location":{"type":"string","description":"Milestone location"},"color":{"type":"string","description":"Display color"},"startDate":{"type":"number","description":"Start date (epoch ms)"},"dueDate":{"type":"number","description":"Due date (epoch ms)"},"plannedStartDate":{"type":"number","description":"Baseline planned start date (epoch ms)"},"plannedDueDate":{"type":"number","description":"Baseline planned due date (epoch ms)"},"wholeDay":{"type":"boolean","description":"Whole-day flag"},"position":{"type":"integer","description":"Display order"},"status":{"type":"string","description":"Milestone status"},"milestoneType":{"type":"string","description":"Milestone type"},"parentMilestoneId":{"type":"string","description":"Parent milestone ID"},"tasksCount":{"type":"integer","description":"Number of tasks linked to this milestone"}}},"DailyLog":{"type":"object","properties":{"id":{"type":"integer","description":"Daily log ID"},"content":{"type":"string","description":"Free-text log body"},"projectId":{"type":"integer","description":"Associated project ID"},"logDate":{"type":"number","description":"Log date (epoch ms)"},"logEndDate":{"type":"number","description":"Log end date (epoch ms)"},"createdAt":{"type":"string","description":"Creation timestamp (ISO 8601)"},"updatedAt":{"type":"string","description":"Last update timestamp (ISO 8601)"},"project":{"type":"object","description":"Associated project","properties":{"id":{"type":"integer","description":"Project ID"},"name":{"type":"string","description":"Project name"}}},"customFieldEntries":{"type":"array","description":"Custom field entries set on this daily log","items":{"$ref":"#/components/schemas/CustomFieldEntry"}}}},"Punchlist":{"type":"object","properties":{"id":{"type":"integer","description":"Punchlist ID"},"parentId":{"type":"integer","description":"Parent project ID"},"parentType":{"type":"string","description":"Parent type (Project)"},"companyId":{"type":"integer","description":"Company ID"},"visibility":{"type":"string","description":"Visibility","enum":["Private","Shared"]},"createdAt":{"type":"string","description":"Creation timestamp (ISO 8601)"},"updatedAt":{"type":"string","description":"Last update timestamp (ISO 8601)"}}},"Task":{"type":"object","properties":{"id":{"type":"integer","description":"Task ID"},"title":{"type":"string","description":"Task title"},"description":{"type":"string","description":"Task description"},"done":{"type":"boolean","description":"Completed flag"},"dueDate":{"type":"number","description":"Due date (epoch ms)"},"dueInDays":{"type":"integer","description":"Days until due"},"doneAt":{"type":"string","description":"Completion timestamp (ISO 8601)"},"visibility":{"type":"string","description":"Visibility (Private or Shared)"},"photosRequired":{"type":"boolean","description":"Photos required flag"},"createdAt":{"type":"string","description":"Creation timestamp (ISO 8601)"},"updatedAt":{"type":"string","description":"Last update timestamp (ISO 8601)"},"taskType":{"type":"string","description":"Task type. A task created with a punchlistId is a Punchlist task; otherwise it is a Task."},"project":{"type":"object","description":"The project this task belongs to, if any (mutually exclusive with lead).","properties":{"id":{"type":"integer","description":"Project ID"},"name":{"type":"string","description":"Project name"}}},"lead":{"type":"object","description":"The lead this task belongs to, if any (mutually exclusive with project).","properties":{"id":{"type":"integer","description":"Lead ID"},"name":{"type":"string","description":"Lead name"}}},"milestone":{"type":"object","description":"The milestone this task is linked to, if any.","properties":{"id":{"type":"integer","description":"Milestone ID"},"name":{"type":"string","description":"Milestone name"}}}}},"File":{"type":"object","properties":{"id":{"type":"integer","description":"File ID"},"name":{"type":"string","description":"File name"},"size":{"type":"number","description":"File size in bytes"},"mimeType":{"type":"string","description":"MIME type"},"extension":{"type":"string","description":"File extension"},"starred":{"type":"boolean","description":"Whether the file is starred"},"type":{"type":"string","description":"File or Folder"},"folderId":{"type":"integer","description":"Parent folder ID"},"contextId":{"type":"integer","description":"Context entity ID (e.g. project ID)"},"contextType":{"type":"string","description":"Context entity type","enum":["Company","Project","Inquiry","RoomBoard"]},"sourceType":{"type":"string","description":"File source type"},"ownerType":{"type":"string","description":"Owner type (CLIENT, SUB, TEAM_MEMBER, TEAM_MANAGER)"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"archivedAt":{"type":"string","description":"Archive timestamp"},"publishedAt":{"type":"string","description":"Published timestamp"},"downloadUrl":{"type":"string","description":"Time-limited pre-signed URL for downloading the file contents (expires roughly 1 hour after the response is issued). Null for folders. Fetch it on demand — do not store it."}}},"TeamMember":{"type":"object","properties":{"id":{"type":"string","description":"Team member ID"},"firstName":{"type":"string","description":"First name"},"lastName":{"type":"string","description":"Last name"},"email":{"type":"string","description":"Email"},"phone":{"type":"string","description":"Phone"},"status":{"type":"string","description":"Teammate status","enum":["PENDING","CONNECTED","ARCHIVED","DEACTIVATED","ON_HOLD","AFFILIATED"]},"role":{"type":"object","description":"Team role","properties":{"id":{"type":"string","description":"Role ID"},"name":{"type":"string","description":"Role name"}}},"teammateType":{"type":"string","description":"Teammate type (TEAM_MEMBER)"},"created":{"type":"string","description":"Creation timestamp"},"modified":{"type":"string","description":"Last modified timestamp"},"lastConnectedTime":{"type":"string","description":"Last connected timestamp"},"lastInvitedTime":{"type":"string","description":"Last invited timestamp"},"website":{"type":"string","description":"Website"},"notes":{"type":"string","description":"Notes"},"address":{"type":"object","description":"Address","properties":{"address":{"type":"string","description":"Address line 1"},"address2":{"type":"string","description":"Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"country":{"type":"string","description":"Country"},"zip":{"type":"string","description":"Zip code"}}}}},"Subcontractor":{"type":"object","properties":{"id":{"type":"string","description":"Subcontractor ID"},"firstName":{"type":"string","description":"First name"},"lastName":{"type":"string","description":"Last name"},"email":{"type":"string","description":"Email"},"phone":{"type":"string","description":"Phone"},"status":{"type":"string","description":"Teammate status","enum":["PENDING","CONNECTED","ARCHIVED","DEACTIVATED","ON_HOLD","AFFILIATED"]},"role":{"type":"object","description":"Team role","properties":{"id":{"type":"string","description":"Role ID"},"name":{"type":"string","description":"Role name"}}},"teammateType":{"type":"string","description":"Teammate type (SUBS)"},"created":{"type":"string","description":"Creation timestamp"},"modified":{"type":"string","description":"Last modified timestamp"},"lastConnectedTime":{"type":"string","description":"Last connected timestamp"},"lastInvitedTime":{"type":"string","description":"Last invited timestamp"},"subInfo":{"type":"object","description":"Subcontractor info","properties":{"companyName":{"type":"string","description":"Company name"},"trades":{"type":"array","description":"Trades","items":{"type":"object","properties":{"tradeId":{"type":"string","description":"Trade ID"},"tradeName":{"type":"string","description":"Trade name"}}}}}},"website":{"type":"string","description":"Website"},"description":{"type":"string","description":"Description"},"notes":{"type":"string","description":"Notes"},"address":{"type":"object","description":"Address","properties":{"address":{"type":"string","description":"Address line 1"},"address2":{"type":"string","description":"Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"country":{"type":"string","description":"Country"},"zip":{"type":"string","description":"Zip code"}}}}},"SubcontractorTrade":{"type":"object","properties":{"id":{"type":"string","description":"Trade ID"},"name":{"type":"string","description":"Trade name"}}},"Vendor":{"type":"object","properties":{"id":{"type":"integer","description":"Vendor ID"},"firstName":{"type":"string","description":"First name"},"lastName":{"type":"string","description":"Last name"},"companyName":{"type":"string","description":"Company name"},"displayName":{"type":"string","description":"Display name"},"email":{"type":"string","description":"Email"},"phoneNumber":{"type":"string","description":"Phone number"},"address":{"type":"string","description":"Address"},"address2":{"type":"string","description":"Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State"},"zip":{"type":"string","description":"Zip code"},"country":{"type":"string","description":"Country"},"website":{"type":"string","description":"Website"},"notes":{"type":"string","description":"Notes"},"archived":{"type":"boolean","description":"Whether the vendor is archived"},"accountNumber":{"type":"string","description":"Account number"},"ein":{"type":"string","description":"Employer Identification Number"},"faxNumber":{"type":"string","description":"Fax number"},"type":{"type":"string","description":"Vendor type"},"description":{"type":"string","description":"Description"},"contactName":{"type":"string","description":"Contact person name"},"location":{"type":"string","description":"Location"},"defaultPaymentTerms":{"type":"integer","description":"Default payment terms (days)"},"chargesTax":{"type":"boolean","description":"Whether the vendor charges tax"},"tags":{"type":"array","description":"Vendor tags","items":{"type":"object","properties":{"id":{"type":"integer","description":"Tag ID"},"name":{"type":"string","description":"Tag name"}}}},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"customFieldEntries":{"type":"array","description":"Custom field entries set on this vendor","items":{"$ref":"#/components/schemas/CustomFieldEntry"}}}},"Contact":{"type":"object","properties":{"id":{"type":"integer","description":"Contact ID"},"name":{"type":"string","description":"Contact name"},"companyName":{"type":"string","description":"Company name"},"email":{"type":["string","null"],"description":"Primary email. Null when the contact has no email on file."},"email2":{"type":"string","description":"Secondary email"},"phone":{"type":"string","description":"Primary phone"},"phone2":{"type":"string","description":"Secondary phone"},"address":{"$ref":"#/components/schemas/PostalAddress","description":"Address"},"notes":{"type":"string","description":"Notes"},"archived":{"type":"boolean","description":"Whether the contact is archived"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"},"projectsCount":{"type":"integer","description":"Number of associated projects"},"tags":{"type":"array","description":"Contact tags","items":{"type":"object","properties":{"id":{"type":"integer","description":"Tag ID"},"name":{"type":"string","description":"Tag name"}}}},"contactGroup":{"type":"object","description":"Contact group this contact belongs to","properties":{"id":{"type":"string","description":"Contact group ID"},"name":{"type":"string","description":"Contact group name"},"contactGroupType":{"type":"string","description":"Contact group type (HOMEOWNER or BUSINESS)"},"archived":{"type":"boolean","description":"Whether the contact group is archived"}}},"customFieldEntries":{"type":"array","description":"Custom field entries set on this contact","items":{"$ref":"#/components/schemas/CustomFieldEntry"}}}},"ContactGroup":{"type":"object","properties":{"id":{"type":"string","description":"Contact group ID"},"name":{"type":"string","description":"Contact group name"},"contactGroupType":{"type":"string","description":"Contact group type (HOMEOWNER or BUSINESS)"},"archived":{"type":"boolean","description":"Whether the contact group is archived"},"contactGroupConnections":{"type":"array","description":"Contacts in this group","items":{"type":"object","properties":{"id":{"type":"string","description":"Connection ID"},"contactId":{"type":"string","description":"Contact ID"},"contactType":{"type":"string","description":"Contact type (CLIENT)"},"contactLevel":{"type":"string","description":"Contact level (PRIMARY or SECONDARY)"},"client":{"type":"object","description":"Connected client","properties":{"id":{"type":"integer","description":"Client ID"},"name":{"type":"string","description":"Client name"},"companyName":{"type":"string","description":"Company name"},"email":{"type":["string","null"],"description":"Email. Null when the client has no email on file."},"phone":{"type":"string","description":"Phone"}}}}}}}},"ContactGroupContact":{"type":"object","properties":{"id":{"type":"string","description":"Contact group ID"},"name":{"type":"string","description":"Contact group name"},"contactGroupType":{"type":"string","description":"Contact group type (HOMEOWNER or BUSINESS)"},"archived":{"type":"boolean","description":"Whether the contact group is archived"},"contactGroupConnections":{"type":"array","description":"Contacts in this group","items":{"type":"object","properties":{"id":{"type":"string","description":"Connection ID"},"contactId":{"type":"string","description":"Contact ID"},"contactType":{"type":"string","description":"Contact type (CLIENT)"},"contactLevel":{"type":"string","description":"Contact level (PRIMARY or SECONDARY)"},"client":{"type":"object","description":"Connected client","properties":{"id":{"type":"integer","description":"Client ID"},"name":{"type":"string","description":"Client name"},"companyName":{"type":"string","description":"Company name"},"email":{"type":["string","null"],"description":"Email. Null when the client has no email on file."},"phone":{"type":"string","description":"Phone"}}}}}}}},"EntityAssignment":{"type":"object","properties":{"assigneeId":{"type":"string","description":"ID of the assignee — a user ID when assigneeType is USER, a contact ID when CONTACT, a teammate ID when PENDING_TEAMMATE"},"assigneeType":{"type":"string","description":"Type of the assignee","enum":["USER","CONTACT","PENDING_TEAMMATE"]},"houzzUserType":{"type":"string","description":"Role of the assignee within the team — only present when assigneeType is USER","enum":["TEAM_MANAGER","TEAM_MEMBER","SUB"]},"assigneeName":{"type":"string","description":"Display name of the assignee (e.g. \"John Smith\")"}}},"WebhookSubscription":{"type":"object","properties":{"id":{"type":"integer","description":"Subscription ID"},"companyId":{"type":"integer","description":"Company ID this subscription belongs to"},"url":{"type":"string","description":"Delivery URL"},"status":{"type":"string","description":"Subscription status (active, paused, disabled)"},"description":{"type":"string","description":"Human-readable label"},"maxAttempts":{"type":"integer","description":"Maximum delivery attempts"},"headers":{"type":"object","description":"Custom HTTP headers for deliveries"},"consecutiveFailures":{"type":"integer","description":"Number of consecutive delivery failures"},"createdBy":{"type":"integer","description":"User ID who created this subscription"},"createdAt":{"type":"string","description":"ISO 8601 creation timestamp"},"updatedAt":{"type":"string","description":"ISO 8601 last-update timestamp"},"triggers":{"type":"array","description":"Active triggers for this subscription","items":{"type":"object","properties":{"id":{"type":"integer","description":"Trigger ID"},"resourceName":{"type":"string","description":"Resource name (e.g. \"client\")"},"eventType":{"type":"string","description":"Event type (create, update, delete)"},"isActive":{"type":"boolean","description":"Whether this trigger is active for this subscription"}}}}}},"WebhookTrigger":{"type":"object","properties":{"resourceName":{"type":"string","description":"Resource name (e.g. \"client\")"},"eventType":{"type":"string","description":"Event type (create, update, delete)"},"label":{"type":"string","description":"Human-readable trigger label (e.g. \"Client Created\")"},"description":{"type":"string","description":"Trigger description shown as tooltip or help text"}}},"Note":{"type":"object","properties":{"id":{"type":"integer","description":"Note ID"},"content":{"type":"string","description":"Note body text"},"containerId":{"type":"integer","description":"ID of the project or lead this note belongs to"},"containerType":{"type":"string","description":"Container type","enum":["Project","Inquiry"]},"containerName":{"type":"string","description":"Name of the container (project or lead)"},"type":{"type":"string","description":"Note type","enum":["DEFAULT","CALL_LOG"]},"subType":{"type":"string","description":"Note sub-type","enum":["NOT_AVAILABLE","GOOD_DISCUSSION","NO_ANSWER","CALL_LATER","NOT_INTERESTED"]},"subTypeDisplayName":{"type":"string","description":"Localized display name for subType"},"isArchived":{"type":"boolean","description":"Whether the note is archived"},"archivedAt":{"type":"string","description":"Archive timestamp (ISO 8601), if archived"},"createdAt":{"type":"string","description":"Creation timestamp (ISO 8601)"},"updatedAt":{"type":"string","description":"Last update timestamp (ISO 8601)"},"owner":{"type":"object","description":"The user who created the note","properties":{"id":{"type":"integer","description":"Owner user ID"},"name":{"type":"string","description":"Owner full name"}}}}}},"responses":{"BadRequest":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"NotFound":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"TooManyRequests":{"description":"Too Many Requests. Three limits apply: a per-company bucket (RATE_LIMIT_EXCEEDED), a service-wide bucket (RATE_LIMIT_EXCEEDED), and a monthly request allowance (MONTHLY_LIMIT_EXCEEDED). Branch on error.code — backing off clears the first two, but a monthly allowance only resets at the start of the next UTC month, which Retry-After and X-Usage-Reset both point at. The X-RateLimit-* headers describe your company bucket and are omitted when the request was shed by the service-wide limit; the X-Usage-* headers are omitted when no monthly allowance applies.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"},"X-Usage-Limit":{"$ref":"#/components/headers/XUsageLimit"},"X-Usage-Remaining":{"$ref":"#/components/headers/XUsageRemaining"},"X-Usage-Reset":{"$ref":"#/components/headers/XUsageReset"}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}},"headers":{"XRateLimitLimit":{"description":"Requests available in a full bucket for your company.","schema":{"type":"integer"}},"XRateLimitRemaining":{"description":"Requests remaining in your company bucket.","schema":{"type":"integer"}},"XRateLimitReset":{"description":"Unix time (seconds) at which your bucket refills to capacity.","schema":{"type":"integer"}},"RetryAfter":{"description":"Seconds to wait before retrying. Always at least 1.","schema":{"type":"integer","minimum":1}},"XUsageLimit":{"description":"Your account's monthly request allowance. Omitted when no allowance applies.","schema":{"type":"integer"}},"XUsageRemaining":{"description":"Requests left in your monthly allowance, this request included.","schema":{"type":"integer"}},"XUsageReset":{"description":"Unix time (seconds) at which the monthly allowance resets (start of the next UTC month).","schema":{"type":"integer"}}}}}