openapi: 3.0.3 info: title: Booqable API (v4 "Boomerang") Availability Orders API description: The Booqable API is a RESTful, JSON:API-compliant interface for managing an equipment and inventory rental business - orders, products, product groups, customers, stock items, availability and plannings, documents and invoices, payments, bundles, collections, and webhooks. Requests are directed to a company-specific host in the form https://{company}.booqable.com/api/4 and authenticated with an access token (Bearer) or a signed single-use request. The default response media type is JSON:API (application/vnd.api+json); a nested JSON representation is available by appending .json to a path. The API is documented as still in Beta and may introduce non-backwards-compatible changes. A legacy v1 API also remains documented. This description was authored by API Evangelist from the public Booqable developer documentation; request and response schemas are modeled and simplified. version: '4' contact: name: Booqable url: https://developers.booqable.com/ license: name: Proprietary url: https://booqable.com/terms/ servers: - url: https://{company}.booqable.com/api/4 description: Company-specific Booqable API v4 host variables: company: default: your-company description: Your Booqable company slug (subdomain). security: - bearerAuth: [] tags: - name: Orders description: Rental orders and their lifecycle. paths: /orders: get: operationId: listOrders tags: - Orders summary: List orders description: Lists and searches rental orders, with JSON:API filtering, sorting, includes, and pagination. parameters: - $ref: '#/components/parameters/PageNumber' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Include' responses: '200': description: A page of orders. content: application/vnd.api+json: schema: $ref: '#/components/schemas/ResourceCollection' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' post: operationId: createOrder tags: - Orders summary: Create an order description: Creates a new rental order. requestBody: $ref: '#/components/requestBodies/ResourceBody' responses: '201': description: The created order. content: application/vnd.api+json: schema: $ref: '#/components/schemas/ResourceDocument' '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/UnprocessableEntity' /orders/new: get: operationId: newOrder tags: - Orders summary: New order template description: Returns a blank order resource pre-populated with defaults, used to start a new order. responses: '200': description: A new order template. content: application/vnd.api+json: schema: $ref: '#/components/schemas/ResourceDocument' '401': $ref: '#/components/responses/Unauthorized' /orders/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getOrder tags: - Orders summary: Fetch an order description: Retrieves a single order by ID, optionally including related resources. parameters: - $ref: '#/components/parameters/Include' responses: '200': description: The requested order. content: application/vnd.api+json: schema: $ref: '#/components/schemas/ResourceDocument' '404': $ref: '#/components/responses/NotFound' patch: operationId: updateOrder tags: - Orders summary: Update an order description: Updates an existing order. requestBody: $ref: '#/components/requestBodies/ResourceBody' responses: '200': description: The updated order. content: application/vnd.api+json: schema: $ref: '#/components/schemas/ResourceDocument' '422': $ref: '#/components/responses/UnprocessableEntity' components: requestBodies: ResourceBody: required: true description: A JSON:API document wrapping the resource under a "data" member. content: application/vnd.api+json: schema: $ref: '#/components/schemas/ResourceDocument' parameters: PageNumber: name: page[number] in: query required: false description: The page number to return (JSON:API pagination). schema: type: integer minimum: 1 default: 1 Include: name: include in: query required: false description: Comma-separated list of related resources to sideload (JSON:API include). schema: type: string PageSize: name: page[size] in: query required: false description: Number of records per page. Defaults to 25. schema: type: integer minimum: 1 default: 25 Id: name: id in: path required: true description: The UUID of the resource. schema: type: string responses: TooManyRequests: description: Rate limit exceeded. "You're doing too many requests! Slow down!" content: application/vnd.api+json: schema: $ref: '#/components/schemas/ErrorDocument' Unauthorized: description: Authentication is missing or invalid. content: application/vnd.api+json: schema: $ref: '#/components/schemas/ErrorDocument' UnprocessableEntity: description: The request was well-formed but failed validation. content: application/vnd.api+json: schema: $ref: '#/components/schemas/ErrorDocument' NotFound: description: The requested resource does not exist. content: application/vnd.api+json: schema: $ref: '#/components/schemas/ErrorDocument' schemas: ResourceDocument: type: object description: A JSON:API document containing a single primary resource. properties: data: $ref: '#/components/schemas/Resource' included: type: array items: $ref: '#/components/schemas/Resource' meta: type: object additionalProperties: true ErrorDocument: type: object description: A JSON:API error document. properties: errors: type: array items: type: object properties: status: type: string code: type: string title: type: string detail: type: string Resource: type: object description: A JSON:API resource object. properties: type: type: string id: type: string attributes: type: object additionalProperties: true relationships: type: object additionalProperties: true ResourceCollection: type: object description: A JSON:API document containing a collection of resources. properties: data: type: array items: $ref: '#/components/schemas/Resource' included: type: array items: $ref: '#/components/schemas/Resource' meta: type: object description: Metadata such as total_count and pagination stats. additionalProperties: true links: type: object additionalProperties: true securitySchemes: bearerAuth: type: http scheme: bearer description: 'An access token created in Booqable account settings, sent as "Authorization: Bearer ". Booqable also supports request signing (single-use signed tokens using ES256, RS256, or HS256) and, on the legacy v1 API, an api_key query parameter.'