CleanCloud Pickup and Delivery API

Recurring pickups, routing, scheduling, and driver location.

OpenAPI Specification

drycleancloud-pickup-and-delivery-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: CleanCloud Business and Reporting Pickup and Delivery API
  description: 'The CleanCloud API provides programmatic access to the CleanCloud point-of-sale and business-management platform for dry cleaners, laundromats, laundry services, and shoe repair businesses. It covers customers, orders and garments, products, price lists, inventory, pickup and delivery scheduling and routing, payments and subscriptions, invoices, promotions and loyalty, messaging, and reporting.


    All calls are HTTPS POST requests with a JSON body to https://cleancloudapp.com/api and return JSON. Authentication uses a per-account API token passed as the `api_token` field in the JSON request body (found in the CleanCloud admin under Settings > Admin > Pickup and Delivery > API). Because the token is a body field rather than an HTTP header or query parameter, it is modeled here as a required `api_token` property on each request schema rather than as an OpenAPI security scheme.


    API access requires a Grow or Grow+ subscription (Pro in Mexico) and is metered at 50,000 requests per month with a maximum of 3 requests per second; additional 25,000-request bundles are available. CleanCloud also emits outbound webhooks for order and customer events; those are documented in the provider apis.yml and review, not as request/response paths here.'
  version: '1.0'
  contact:
    name: CleanCloud
    url: https://cleancloudapp.com
  x-authentication:
    scheme: api_token
    location: request body (JSON field `api_token`)
    note: Every endpoint requires the api_token field. It is not sent as an Authorization header or query parameter.
servers:
- url: https://cleancloudapp.com/api
  description: CleanCloud production API
tags:
- name: Pickup and Delivery
  description: Recurring pickups, routing, scheduling, and driver location.
paths:
  /repeatPickup:
    post:
      operationId: repeatPickup
      tags:
      - Pickup and Delivery
      summary: Create a recurring pickup
      description: Creates a scheduled recurring pickup for a customer.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/AuthBody'
              - type: object
                required:
                - customerID
                properties:
                  customerID:
                    type: string
                  frequency:
                    type: string
                  dayOfWeek:
                    type: string
      responses:
        '200':
          description: The created recurring pickup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /updateRepeatPickup:
    post:
      operationId: updateRepeatPickup
      tags:
      - Pickup and Delivery
      summary: Update a recurring pickup
      description: Modifies an existing recurring pickup schedule.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/AuthBody'
              - type: object
                required:
                - pickupID
                properties:
                  pickupID:
                    type: string
                  frequency:
                    type: string
                  dayOfWeek:
                    type: string
      responses:
        '200':
          description: The updated recurring pickup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /deletePickup:
    post:
      operationId: deletePickup
      tags:
      - Pickup and Delivery
      summary: Cancel a recurring pickup
      description: Cancels a recurring pickup.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/AuthBody'
              - type: object
                required:
                - pickupID
                properties:
                  pickupID:
                    type: string
      responses:
        '200':
          description: Cancellation result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /getPickups:
    post:
      operationId: getPickups
      tags:
      - Pickup and Delivery
      summary: List recurring pickups
      description: Retrieves a customer's recurring pickups.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/AuthBody'
              - type: object
                required:
                - customerID
                properties:
                  customerID:
                    type: string
      responses:
        '200':
          description: A list of recurring pickups.
          content:
            application/json:
              schema:
                type: object
                properties:
                  Pickups:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /getDates:
    post:
      operationId: getDates
      tags:
      - Pickup and Delivery
      summary: Get available dates
      description: Returns available pickup/delivery dates with remaining slot counts.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/AuthBody'
              - type: object
                properties:
                  routeID:
                    type: string
      responses:
        '200':
          description: Available dates.
          content:
            application/json:
              schema:
                type: object
                properties:
                  Dates:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /getSlots:
    post:
      operationId: getSlots
      tags:
      - Pickup and Delivery
      summary: Get time slots
      description: Returns available time slots for a route on a given day.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/AuthBody'
              - type: object
                properties:
                  routeID:
                    type: string
                  date:
                    type: string
      responses:
        '200':
          description: Available time slots.
          content:
            application/json:
              schema:
                type: object
                properties:
                  Slots:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /getRoute:
    post:
      operationId: getRoute
      tags:
      - Pickup and Delivery
      summary: Resolve a route
      description: Determines the delivery route from coordinates or an address.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/AuthBody'
              - type: object
                properties:
                  address:
                    type: string
                  lat:
                    type: number
                  lng:
                    type: number
      responses:
        '200':
          description: The resolved route.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /driverLocation:
    post:
      operationId: driverLocation
      tags:
      - Pickup and Delivery
      summary: Get driver location
      description: Returns the current driver location for an order.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/AuthBody'
              - type: object
                required:
                - orderID
                properties:
                  orderID:
                    type: string
      responses:
        '200':
          description: The current driver location.
          content:
            application/json:
              schema:
                type: object
                properties:
                  lat:
                    type: number
                  lng:
                    type: number
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    SuccessResponse:
      type: object
      properties:
        Success:
          type: string
          description: Typically "True" on success.
    Error:
      type: object
      properties:
        Error:
          type: string
        Success:
          type: string
    AuthBody:
      type: object
      required:
      - api_token
      properties:
        api_token:
          type: string
          description: Per-account API token from Settings > Admin > Pickup and Delivery > API. Required on every request.
  responses:
    Unauthorized:
      description: Missing or invalid api_token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'