openapi: 3.0.1 info: title: Cloudprinter CloudCore API description: >- The Cloudprinter.com CloudCore API is a JSON REST interface for the global print-on-demand and print-fulfillment network. All calls are HTTP POST and authenticate with a CloudCore apikey supplied in the JSON request body. The API exposes product catalog lookups, real-time price and shipping quotes, order creation and management, and shipping reference data. Production and shipment events are delivered separately via CloudSignal webhooks. termsOfService: https://www.cloudprinter.com/terms-conditions contact: name: Cloudprinter.com Support url: https://www.cloudprinter.com/contact version: '1.0' servers: - url: https://api.cloudprinter.com/cloudcore/1.0 description: CloudCore API v1.0 production server security: - apikeyBody: [] tags: - name: Orders description: Create, list, retrieve, cancel, and audit print orders. - name: Products description: List products and retrieve product specifications and options. - name: Quotes description: Request real-time product and shipping price quotes. - name: Shipping description: Shipping levels, supported countries, and states reference data. paths: /orders/: post: operationId: listOrders tags: - Orders summary: List orders description: Request a list of all orders for the account. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ApiKeyRequest' responses: '200': description: A list of orders. content: application/json: schema: $ref: '#/components/schemas/OrderListResponse' '403': $ref: '#/components/responses/Forbidden' /orders/info: post: operationId: getOrderInfo tags: - Orders summary: Get order info description: >- Retrieve comprehensive details for a specific order including addresses, items, files, and current state. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrderReferenceRequest' responses: '200': description: Order details. content: application/json: schema: $ref: '#/components/schemas/Order' '403': $ref: '#/components/responses/Forbidden' '410': $ref: '#/components/responses/NotFound' /orders/add: post: operationId: addOrder tags: - Orders summary: Add order description: >- Create a new order with items, addresses, options, and print file references. Items may reference a quote hash or specify a shipping level directly. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddOrderRequest' responses: '201': description: Order created. content: application/json: schema: $ref: '#/components/schemas/AddOrderResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' /orders/cancel: post: operationId: cancelOrder tags: - Orders summary: Cancel order description: Request cancellation of an order that has not yet entered production. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrderReferenceRequest' responses: '200': description: Cancellation accepted. '403': $ref: '#/components/responses/Forbidden' '409': $ref: '#/components/responses/Conflict' '410': $ref: '#/components/responses/NotFound' /orders/log: post: operationId: getOrderLog tags: - Orders summary: Order log description: Retrieve the historical state changes for an order. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrderReferenceRequest' responses: '200': description: Order state-change log. content: application/json: schema: $ref: '#/components/schemas/OrderLogResponse' '403': $ref: '#/components/responses/Forbidden' '410': $ref: '#/components/responses/NotFound' /orders/quote: post: operationId: getOrderQuote tags: - Quotes summary: Order quote description: >- Calculate product prices and shipping options for a list of items in a destination country. Each returned quote carries a unique hash valid for 48 hours that can be referenced when adding an order. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QuoteRequest' responses: '200': description: Quote results with product prices and shipping options. content: application/json: schema: $ref: '#/components/schemas/QuoteResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' /products: post: operationId: listProducts tags: - Products summary: List products description: Request a list of all products already enabled for the account. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ApiKeyRequest' responses: '200': description: A list of products. content: application/json: schema: $ref: '#/components/schemas/ProductListResponse' '403': $ref: '#/components/responses/Forbidden' /products/info: post: operationId: getProductInfo tags: - Products summary: Product info description: >- Get detailed specifications, available options, and pricing for a single product by its product reference. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProductInfoRequest' responses: '200': description: Product specification and options. content: application/json: schema: $ref: '#/components/schemas/ProductInfo' '403': $ref: '#/components/responses/Forbidden' '410': $ref: '#/components/responses/NotFound' /shipping/levels: post: operationId: getShippingLevels tags: - Shipping summary: Shipping levels description: Retrieve the available shipping service tiers (cp_fast, cp_saver, cp_ground, cp_postal). requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ApiKeyRequest' responses: '200': description: Available shipping levels. '403': $ref: '#/components/responses/Forbidden' /shipping/countries: post: operationId: getShippingCountries tags: - Shipping summary: Shipping countries description: List supported delivery destination countries. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ApiKeyRequest' responses: '200': description: Supported countries. '403': $ref: '#/components/responses/Forbidden' /shipping/states: post: operationId: getShippingStates tags: - Shipping summary: Shipping states description: Get the regions or states available for a specific country. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ShippingStatesRequest' responses: '200': description: States for the given country. '403': $ref: '#/components/responses/Forbidden' components: securitySchemes: apikeyBody: type: apiKey in: header name: apikey description: >- CloudCore API key from the Cloudprinter.com dashboard. The API key is supplied in the JSON request body as the "apikey" field on every call; this scheme is declared as a header for tooling compatibility. responses: BadRequest: description: Invalid request parameters. Forbidden: description: Missing or invalid credentials. Conflict: description: Conflict - the order is in a state that does not allow the operation. NotFound: description: Resource not found. schemas: ApiKeyRequest: type: object required: - apikey properties: apikey: type: string description: CloudCore API key. OrderReferenceRequest: type: object required: - apikey - reference properties: apikey: type: string reference: type: string description: The unique order reference. ShippingStatesRequest: type: object required: - apikey - country properties: apikey: type: string country: type: string description: ISO 3166-1 alpha-2 country code. ProductInfoRequest: type: object required: - apikey - product properties: apikey: type: string product: type: string description: The product reference. QuoteRequest: type: object required: - apikey - country - items properties: apikey: type: string country: type: string description: ISO 3166-1 alpha-2 destination country code. state: type: string description: State or region code, required for some countries (e.g. US). currency: type: string description: ISO 4217 currency code for returned prices. items: type: array items: $ref: '#/components/schemas/QuoteItem' QuoteItem: type: object required: - reference - product - count properties: reference: type: string description: Caller-supplied item reference. product: type: string description: Product reference. count: type: integer description: Number of copies. options: type: array items: $ref: '#/components/schemas/Option' QuoteResponse: type: object properties: quotes: type: array items: type: object properties: hash: type: string description: Unique quote hash, valid for 48 hours. price: type: string currency: type: string shipping_options: type: array items: type: object properties: level: type: string price: type: string currency: type: string Option: type: object required: - type properties: type: type: string description: Option type reference (e.g. type_cover_paper, type_book_binding). count: type: integer File: type: object required: - type - url properties: type: type: string description: File type - product, cover, or book. enum: - product - cover - book url: type: string format: uri description: Publicly reachable URL of the print-ready file. md5sum: type: string description: MD5 checksum used to validate the downloaded file. Address: type: object required: - type - firstname - lastname - street1 - zip - city - country properties: type: type: string description: Address type - delivery or invoice. firstname: type: string lastname: type: string company: type: string street1: type: string street2: type: string zip: type: string city: type: string state: type: string country: type: string description: ISO 3166-1 alpha-2 country code. email: type: string phone: type: string OrderItem: type: object required: - reference - product - count properties: reference: type: string product: type: string count: type: integer shipping_level: type: string description: Shipping level reference (e.g. cp_saver). Use this or a quote hash. quote: type: string description: Quote hash from a prior /orders/quote call. options: type: array items: $ref: '#/components/schemas/Option' files: type: array items: $ref: '#/components/schemas/File' AddOrderRequest: type: object required: - apikey - reference - email - addresses - items properties: apikey: type: string reference: type: string description: Unique order reference supplied by the caller. email: type: string addresses: type: array items: $ref: '#/components/schemas/Address' items: type: array items: $ref: '#/components/schemas/OrderItem' AddOrderResponse: type: object properties: reference: type: string order: type: string description: Cloudprinter order identifier. Order: type: object properties: reference: type: string order: type: string state: type: string email: type: string addresses: type: array items: $ref: '#/components/schemas/Address' items: type: array items: $ref: '#/components/schemas/OrderItem' OrderListResponse: type: object properties: orders: type: array items: $ref: '#/components/schemas/Order' OrderLogResponse: type: object properties: log: type: array items: type: object properties: date: type: string format: date-time state: type: string message: type: string ProductListResponse: type: object properties: products: type: array items: type: object properties: reference: type: string name: type: string category: type: string ProductInfo: type: object properties: reference: type: string name: type: string options: type: array items: type: object properties: type: type: string name: type: string price_units: type: array items: type: string description: Price unit type (e.g. price_unit_pr_order, price_unit_pr_page).