Zoca Checkout API

The Checkout API from Zoca — 14 operation(s) for checkout.

Operations 14

POST /scheduling/checkout/pay Process a payment for a sale #
POST /scheduling/checkout/processing-fee-quote Quote checkout processing fee #
PATCH /scheduling/checkout/sale/{saleId}/tip Update the tip on a sale #
POST /scheduling/checkout/cancel-payment/{paymentId} Cancel a payment #
POST /scheduling/checkout/split-payment Process a split payment (cash + card) #
GET /scheduling/checkout/sale/{saleId} Get sale details for checkout #
GET /scheduling/checkout/booking/{bookingId} Get sale by booking ID for checkout #
POST /scheduling/checkout/send-payment-link Send a payment link via SMS or EMAIL #
POST /scheduling/checkout/generate-payment-link Generate a payment link without sending #
POST /scheduling/checkout/generate-payment-qr Generate a QR code for payment link #
POST /scheduling/checkout/offers/override/entity/{entityId} Staff override: apply an offer regardless of restrictions #
POST /scheduling/checkout/offers/override/batch/entity/{entityId} Staff batch override: stack multiple offers with warnings #
POST /scheduling/checkout/reader/cancel Cancel an in-flight reader prompt #
POST /scheduling/checkout/reader/retry Retry a failed reader payment using a (possibly different) reader #

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-checkout-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-checkout-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Zoca Platform Checkout 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: Checkout
paths:
  /scheduling/checkout/pay:
    post:
      description: Unified payment endpoint supporting CASH, CARD, CARD_ON_FILE, and TAP_TO_PAY. Cash payments are immediately COMPLETED. Card payments return PROCESSING status and are confirmed via webhook.
      operationId: t_value
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: Payment processed successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  paymentId:
                    type: string
                    format: uuid
                    description: Payment record ID
                  status:
                    type: string
                    enum:
                    - COMPLETED
                    - PROCESSING
                    - FAILED
                    description: Payment status
                  saleStatus:
                    type: string
                    enum:
                    - OPEN
                    - PARTIALLY_PAID
                    - PAID
                    description: Updated sale status
                  amountPaid:
                    type: number
                    description: Total amount paid in cents
                  amountDue:
                    type: number
                    description: Remaining amount due in cents
                  processingFeeAmount:
                    type: number
                    description: Processing fee charged for this payment in dollars
                  preProcessingAmount:
                    type: number
                    description: Base amount used for fee calculation in dollars
                  chargeAmount:
                    type: number
                    description: Gross amount charged to the customer in dollars
                  stripePaymentIntentId:
                    type: string
                    description: Stripe PaymentIntent ID (card payments only)
                  clientSecret:
                    type: string
                    description: Client secret for confirming payment (new card only)
                  cardBrand:
                    type: string
                    description: Card brand (visa, mastercard, etc.)
                  cardLast4:
                    type: string
                    description: Last 4 digits of card
                  latestAttemptId:
                    type: string
                    description: CARD_READER only — id of the reader attempt row for cancel/retry polling
                  message:
                    type: string
                    description: Status message
        '400':
          description: Bad request - validation failed
        '404':
          description: Sale not found
      summary: Process a payment for a sale
      tags:
      - Checkout
  /scheduling/checkout/processing-fee-quote:
    post:
      description: Returns the pass-through processing fee and gross customer charge for the selected payment method.
      operationId: t_value
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: ''
      summary: Quote checkout processing fee
      tags:
      - Checkout
  /scheduling/checkout/sale/{saleId}/tip:
    patch:
      description: Persists the tip on the sale (override, not accumulate) before collecting payment so the checkout total and processing-fee quote stay correct. Omitting additionalTip (or sending a zero value) clears the tip.
      operationId: t_value
      parameters:
      - name: saleId
        required: true
        in: path
        description: Sale ID
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: Tip updated; returns the updated sale summary
        '404':
          description: Sale not found
      summary: Update the tip on a sale
      tags:
      - Checkout
  /scheduling/checkout/cancel-payment/{paymentId}:
    post:
      description: Marks a payment as CANCELLED. Only PENDING or PROCESSING payments can be cancelled. If Stripe processes the payment after cancellation, an automatic refund is triggered.
      operationId: t_value
      parameters:
      - name: paymentId
        required: true
        in: path
        description: Payment ID
        schema:
          type: string
      responses:
        '200':
          description: Payment cancelled successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    description: Payment ID
                  status:
                    type: string
                    enum:
                    - CANCELLED
                    description: Payment status
                  saleId:
                    type: string
                    format: uuid
                    description: Sale ID
                  stripePaymentIntentCancelled:
                    type: boolean
                    description: Whether Stripe PaymentIntent was successfully cancelled
        '400':
          description: Payment cannot be cancelled
        '404':
          description: Payment not found
      summary: Cancel a payment
      tags:
      - Checkout
  /scheduling/checkout/split-payment:
    post:
      description: Handles multiple payments in sequence for a single checkout. Cash portion is processed first, then card portion. Automatically determines FINAL vs PARTIAL payment type.
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: Split payment processed successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  cashPayment:
                    type: object
                    description: Cash payment details (if cash amount provided)
                  cardPayment:
                    type: object
                    description: Card payment details (if card amount provided)
                  saleStatus:
                    type: string
                    description: Updated sale status
                  amountPaid:
                    type: number
                    description: Total amount paid in cents
                  amountDue:
                    type: number
                    description: Remaining amount due in cents
        '400':
          description: Bad request - validation failed
        '404':
          description: Sale not found
      summary: Process a split payment (cash + card)
      tags:
      - Checkout
  /scheduling/checkout/sale/{saleId}:
    get:
      description: Retrieves complete sale information including amounts, payment history, and summary. Use this to populate the checkout UI.
      operationId: t_value
      parameters:
      - name: saleId
        required: true
        in: path
        description: Sale ID
        schema:
          type: string
      responses:
        '200':
          description: Sale details retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  sale:
                    type: object
                    description: Sale record
                  payments:
                    type: array
                    items:
                      type: object
                    description: Payment history
                  summary:
                    type: object
                    properties:
                      subtotal:
                        type: number
                        description: Subtotal in cents
                      discountAmount:
                        type: number
                        description: Discount amount in cents
                      taxAmount:
                        type: number
                        description: Tax amount in cents
                      tipAmount:
                        type: number
                        description: Tip amount in cents
                      preProcessingAmount:
                        type: number
                        description: Sale amount before processing fees in dollars
                      processingFee:
                        type: number
                        description: Collected processing fee in dollars
                      totalAmount:
                        type: number
                        description: Total amount in cents
                      amountPaid:
                        type: number
                        description: Amount paid in cents
                      amountDue:
                        type: number
                        description: Amount due in cents
                      status:
                        type: string
                        description: Sale status
        '404':
          description: Sale not found
      summary: Get sale details for checkout
      tags:
      - Checkout
  /scheduling/checkout/booking/{bookingId}:
    get:
      description: Retrieves sale details using booking ID. Each booking has exactly one sale, so this provides a convenient lookup.
      operationId: t_value
      parameters:
      - name: bookingId
        required: true
        in: path
        description: Booking ID
        schema:
          type: string
      responses:
        '200':
          description: Sale details retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  sale:
                    type: object
                    description: Sale record
                  payments:
                    type: array
                    items:
                      type: object
                    description: Payment history
                  summary:
                    type: object
                    description: Payment summary
        '404':
          description: Sale not found for booking
      summary: Get sale by booking ID for checkout
      tags:
      - Checkout
  /scheduling/checkout/send-payment-link:
    post:
      description: Generates a Stripe Checkout Session URL and sends it to the client via SMS or EMAIL. If price is null, it will be calculated from the sale. Tip is optional.
      operationId: t_value
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: Payment link sent successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    description: Whether the operation succeeded
                  paymentUrl:
                    type: string
                    format: uri
                    description: Stripe Checkout Session URL
                    example: https://checkout.stripe.com/c/pay/cs_test_a1...
                  sessionId:
                    type: string
                    description: Stripe Checkout Session ID
                    example: cs_test_a1b2c3d4e5f6g7h8i9j0
                  commStatus:
                    type: string
                    description: Communication delivery status
                    example: SENT
                  amount:
                    type: number
                    description: Total amount including tip in cents
        '400':
          description: Bad request - validation failed
        '404':
          description: Sale or client not found
      summary: Send a payment link via SMS or EMAIL
      tags:
      - Checkout
  /scheduling/checkout/generate-payment-link:
    post:
      description: Creates a Stripe Checkout Session URL without sending it. Returns the URL that can be shared with the client through any channel.
      operationId: t_value
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: Payment link generated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  url:
                    type: string
                    format: uri
                    description: Stripe Checkout Session URL
                  sessionId:
                    type: string
                    description: Stripe Checkout Session ID
                  amount:
                    type: number
                    description: Total amount including tip in cents
        '400':
          description: Bad request - validation failed
        '404':
          description: Sale or booking not found
      summary: Generate a payment link without sending
      tags:
      - Checkout
  /scheduling/checkout/generate-payment-qr:
    post:
      description: Creates a Stripe Checkout Session and generates a scannable QR code image. Returns both the QR code URL and the payment link URL. Clients can scan the QR code to open the payment page.
      operationId: t_value
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/e'
      responses:
        '200':
          description: QR code generated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  qrURL:
                    type: string
                    format: uri
                    description: QR code image URL (can be null if generation fails)
                    example: https://s3.amazonaws.com/bucket/qr-code.png
                  paymentUrl:
                    type: string
                    format: uri
                    description: Stripe Checkout Session URL
                    example: https://checkout.stripe.com/c/pay/cs_test_a1...
                  amount:
                    type: number
                    description: Total amount including tip in cents
        '400':
          description: Bad request - validation failed
        '404':
          description: Sale or booking not found
      summary: Generate a QR code for payment link
      tags:
      - Checkout
  /scheduling/checkout/offers/override/entity/{entityId}:
    post:
      description: Returns discount amount and warnings. Staff confirms after reviewing warnings. Requires clientId (customer), serviceId, and servicePrice in the request body.
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: Override calculated with warnings
      summary: 'Staff override: apply an offer regardless of restrictions'
      tags:
      - Checkout
  /scheduling/checkout/offers/override/batch/entity/{entityId}:
    post:
      description: Allows staff to stack non-stackable offers on services. Returns per-offer discounts and warnings about stacking violations.
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: Batch override calculated with warnings
      summary: 'Staff batch override: stack multiple offers with warnings'
      tags:
      - Checkout
  /scheduling/checkout/reader/cancel:
    post:
      operationId: t_value
      parameters: []
      responses:
        '204':
          description: ''
      summary: Cancel an in-flight reader prompt
      tags:
      - Checkout
  /scheduling/checkout/reader/retry:
    post:
      operationId: t_value
      parameters: []
      responses:
        '200':
          description: ''
      summary: Retry a failed reader payment using a (possibly different) reader
      tags:
      - Checkout
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