Zoca Packages API

The Packages API from Zoca — 14 operation(s) for packages.

Operations 16

POST /packages/{entityId}/templates Create a package template #
GET /packages/{entityId}/templates List package templates #
GET /packages/{entityId}/templates/{id} Get a package template by ID #
PUT /packages/{entityId}/templates/{id} Update a package template #
POST /packages/{entityId}/templates/{id}/archive Archive a package template #
POST /packages/{entityId}/templates/{id}/unarchive Unarchive a package template #
POST /packages/{entityId}/templates/{id}/duplicate Duplicate a package template #
GET /packages/{entityId}/service-usage List active package templates that reference a service #
GET /packages/{entityId}/purchased List sold packages for an entity #
GET /packages/{entityId}/purchased/{id} Get a purchased package by ID #
GET /packages/{entityId}/clients/{clientId}/balances Get a client's package credit balances #
GET /packages/{entityId}/clients/{clientId}/purchased List a client's purchased packages #
GET /packages/{entityId}/purchased/{id}/refund-quote Quote a refund for a purchased package #
POST /packages/{entityId}/purchased/{id}/refund Refund a purchased package #
POST /packages/{entityId}/purchased/{id}/extend-expiry Extend or revive a purchased package expiry #
POST /packages/{entityId}/purchased/{purchasedPackageId}/reassign Reassign a purchased group's credits to a different eligible service #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/zoca-packages-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

zoca-packages-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Zoca Platform Packages 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: Packages
paths:
  /packages/{entityId}/templates:
    post:
      operationId: t_value
      parameters:
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '201':
          description: Template created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/e'
        '400':
          description: Invalid input (business rules 1-5)
      security:
      - bearer: []
      summary: Create a package template
      tags:
      - Packages
    get:
      operationId: t_value
      parameters:
      - name: cursor
        required: false
        in: query
        schema:
          type: string
      - name: limit
        required: false
        in: query
        schema:
          type: number
      - name: status
        required: false
        in: query
        schema:
          enum:
          - active
          - archived
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: Cursor-paginated templates
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/e'
      security:
      - bearer: []
      summary: List package templates
      tags:
      - Packages
  /packages/{entityId}/templates/{id}:
    get:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: Template found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/e'
        '404':
          description: Template not found
      security:
      - bearer: []
      summary: Get a package template by ID
      tags:
      - Packages
    put:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: Template updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/e'
        '400':
          description: Invalid input (business rules 1-5)
        '404':
          description: Template not found
      security:
      - bearer: []
      summary: Update a package template
      tags:
      - Packages
  /packages/{entityId}/templates/{id}/archive:
    post:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: Template archived
        '404':
          description: Template not found
      security:
      - bearer: []
      summary: Archive a package template
      tags:
      - Packages
  /packages/{entityId}/templates/{id}/unarchive:
    post:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: Template unarchived
        '404':
          description: Template not found
      security:
      - bearer: []
      summary: Unarchive a package template
      tags:
      - Packages
  /packages/{entityId}/templates/{id}/duplicate:
    post:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      responses:
        '201':
          description: Duplicate created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/e'
        '404':
          description: Template not found
      security:
      - bearer: []
      summary: Duplicate a package template
      tags:
      - Packages
  /packages/{entityId}/service-usage:
    get:
      operationId: t_value
      parameters:
      - name: serviceId
        required: true
        in: query
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: Referencing templates
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/e'
      security:
      - bearer: []
      summary: List active package templates that reference a service
      tags:
      - Packages
  /packages/{entityId}/purchased:
    get:
      operationId: t_value
      parameters:
      - name: cursor
        required: false
        in: query
        schema:
          type: string
      - name: limit
        required: false
        in: query
        schema:
          type: number
      - name: clientId
        required: false
        in: query
        schema:
          type: string
      - name: status
        required: false
        in: query
        schema:
          enum:
          - ACTIVE
          - EXPIRED
          - REFUNDED
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: Cursor-paginated sold packages
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/e'
                  nextCursor:
                    type:
                    - string
                    - 'null'
      security:
      - bearer: []
      summary: List sold packages for an entity
      tags:
      - Packages
  /packages/{entityId}/purchased/{id}:
    get:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: Purchased package found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/e'
        '404':
          description: Purchased package not found
      security:
      - bearer: []
      summary: Get a purchased package by ID
      tags:
      - Packages
  /packages/{entityId}/clients/{clientId}/balances:
    get:
      operationId: t_value
      parameters:
      - name: clientId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: Client package balances
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/e'
      security:
      - bearer: []
      summary: Get a client's package credit balances
      tags:
      - Packages
  /packages/{entityId}/clients/{clientId}/purchased:
    get:
      operationId: t_value
      parameters:
      - name: cursor
        required: false
        in: query
        schema:
          type: string
      - name: limit
        required: false
        in: query
        schema:
          type: number
      - name: status
        required: false
        in: query
        schema:
          enum:
          - ACTIVE
          - EXPIRED
          - REFUNDED
          type: string
      - name: clientId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: Cursor-paginated purchased packages
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/e'
                  nextCursor:
                    type:
                    - string
                    - 'null'
      security:
      - bearer: []
      summary: List a client's purchased packages
      tags:
      - Packages
  /packages/{entityId}/purchased/{id}/refund-quote:
    get:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: Refund quote
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/e'
        '404':
          description: Purchased package not found
        '409':
          description: Package is not ACTIVE
        '422':
          description: Redeemed items lack a frozen à-la-carte price
      security:
      - bearer: []
      summary: Quote a refund for a purchased package
      tags:
      - Packages
  /packages/{entityId}/purchased/{id}/refund:
    post:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: Refund processed
        '400':
          description: Refund amount invalid / exceeds remaining
        '404':
          description: Purchased package not found
        '409':
          description: Package is not ACTIVE
      security:
      - bearer: []
      summary: Refund a purchased package
      tags:
      - Packages
  /packages/{entityId}/purchased/{id}/extend-expiry:
    post:
      operationId: t_value
      parameters:
      - name: id
        required: true
        in: path
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: Expiry extended
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/e'
        '400':
          description: New expiry must be in the future
        '404':
          description: Purchased package not found
        '409':
          description: Package is REFUNDED
      security:
      - bearer: []
      summary: Extend or revive a purchased package expiry
      tags:
      - Packages
  /packages/{entityId}/purchased/{purchasedPackageId}/reassign:
    post:
      operationId: t_value
      parameters:
      - name: purchasedPackageId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      - name: entityId
        required: true
        in: path
        schema:
          format: uuid
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: Credits reassigned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/e'
        '400':
          description: Invalid from/to refs or inactive target service
        '404':
          description: Purchased package or group not found
        '409':
          description: Package is not ACTIVE
      security:
      - bearer: []
      summary: Reassign a purchased group's credits to a different eligible service
      tags:
      - Packages
components:
  schemas:
    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 <token>
      in: header