openapi: 3.2.0 info: title: Zoca Platform Addons API description: 'The Zoca platform API behind the Zoca web app and mobile apps: scheduling, website generation, Google Business Profile, discovery/local SEO, social media, booking enquiries, offers, clients, staff, billing and the Zoca "brain" agent layer.' version: 3.20.10 contact: {} x-apievangelist-note: Harvested verbatim from https://api.zoca.ai/swagger.json. The provider ships the default NestJS Swagger metadata (title "API Documentation", empty servers[]); title/description/servers were set by API Evangelist for identification and the unmodified original is preserved at openapi/_original/zoca-platform-swagger.json. Every path, operation, summary, parameter and response is exactly as published. servers: - url: https://api.zoca.ai description: Production tags: - name: Addons paths: /addons/{entityId}: get: operationId: t_value parameters: - name: isActive required: false in: query schema: type: boolean - name: groupId required: false in: query schema: format: uuid type: string - name: serviceId required: false in: query schema: format: uuid type: string - name: entityId required: true in: path schema: format: uuid type: string responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/e' security: - bearer: [] summary: List addons for entity (with optional filters). tags: - Addons post: operationId: t_value parameters: [] responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/e' security: - bearer: [] summary: Create a standalone addon. tags: - Addons /addons/{entityId}/{addonId}: get: operationId: t_value parameters: [] responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/t' security: - bearer: [] summary: Get an addon with linked services + groups. tags: - Addons patch: operationId: t_value parameters: [] responses: '200': description: '' security: - bearer: [] summary: Update an addon. tags: - Addons /addons/{entityId}/{addonId}/archive: patch: operationId: t_value parameters: [] responses: '200': description: '' security: - bearer: [] summary: Soft-archive an addon (isActive=false). tags: - Addons /addons/{entityId}/{addonId}/unarchive: patch: operationId: t_value parameters: [] responses: '200': description: '' security: - bearer: [] summary: Restore an archived addon. tags: - Addons /addons/{entityId}/{addonId}/services: post: operationId: t_value parameters: [] responses: '201': description: '' security: - bearer: [] summary: Direct-attach addon to services (writes service_addons rows with addon_group_id=NULL). tags: - Addons /addons/{entityId}/{addonId}/services/{serviceId}: delete: operationId: t_value parameters: [] responses: '200': description: '' security: - bearer: [] summary: Direct-detach addon from a service. tags: - Addons /addons/{entityId}/{addonId}/groups: post: operationId: t_value parameters: [] responses: '201': description: '' security: - bearer: [] summary: Add addon to one or more groups (via addon_group_items). tags: - Addons /addons/{entityId}/{addonId}/groups/{groupId}: delete: operationId: t_value parameters: [] responses: '200': description: '' security: - bearer: [] summary: Remove addon from a group. tags: - Addons components: schemas: t: type: object properties: id: type: number planId: type: number agentEntityId: type: - object - 'null' format: uuid agentName: type: string internalAddonName: type: string description: Chargebee item_price_id (internal addon name) externalAddonName: type: string description: Human-readable addon label shown to end-users active: type: boolean description: true if the location currently holds an active subscription for this addon subscriptionId: type: - object - 'null' quantity: type: - object - 'null' trialEnd: type: - object - 'null' description: Unix epoch seconds (Chargebee trial_end) addonPricingId: type: - object - 'null' description: chargebee.addon_pricing.id for this addon at the location's current cadence. Pass back to PATCH /billing/subscription as `update_items.items[].addonPricingId`.Null when no active addon_pricing row exists - surfaces a config gap and the FE should hide the buy CTA. unitPriceCents: type: - object - 'null' description: Per-line price the location would be billed at this cadence (cents). required: - id - planId - agentEntityId - agentName - internalAddonName - externalAddonName - active - subscriptionId - quantity - trialEnd - addonPricingId - unitPriceCents e: type: object properties: id: type: number entityId: type: string attribute: type: string value: type: - object - 'null' metadata: type: - object - 'null' createdAt: type: - object - 'null' required: - id - entityId - attribute securitySchemes: access-token: scheme: bearer bearerFormat: JWT type: http name: Authorization description: Enter JWT token in the format Bearer in: header