openapi: 3.0.3 info: title: Nuvemshop / Tiendanube Admin Categories Orders API description: 'Store-scoped REST Admin API for the Nuvemshop (Tiendanube) e-commerce platform. This document models a grounded, representative subset of the public API - products, product variants, product images, categories, orders, customers, coupons, webhooks, scripts, and store - as documented at https://tiendanube.github.io/api-documentation/. Every path is relative to a per-store base that embeds the store id, for example `https://api.tiendanube.com/2025-03/{store_id}`. The Brazilian mirror `https://api.nuvemshop.com.br/2025-03/{store_id}` serves the same API, and the long-standing `v1` path (`https://api.tiendanube.com/v1/{store_id}`) remains available as the legacy equivalent. Authentication is OAuth 2 (authorization code grant). The resulting non-expiring access token is sent in a NON-STANDARD header named `Authentication` with a lowercase `bearer` prefix (`Authentication: bearer ACCESS_TOKEN`) - using `Authorization` or a different case returns 401. Every request must also send a descriptive `User-Agent` header identifying the app and a contact (name/email or URL); omitting it returns 400. NOTE ON MODELING: endpoint paths, methods, and the auth/header/rate-limit behavior below are grounded in the live documentation. Request and response body schemas are simplified representative models (marked with additionalProperties) rather than the provider''s full field-level schema.' version: 2025-03 contact: name: Nuvemshop / Tiendanube Developers url: https://tiendanube.github.io/api-documentation/ license: name: MIT (documentation) url: https://github.com/TiendaNube servers: - url: https://api.tiendanube.com/2025-03/{store_id} description: Tiendanube (Spanish-speaking markets) variables: store_id: default: '0' description: The numeric store id (user_id) returned during OAuth authorization. - url: https://api.nuvemshop.com.br/2025-03/{store_id} description: Nuvemshop (Brazil) variables: store_id: default: '0' description: The numeric store id (user_id) returned during OAuth authorization. security: - authenticationHeader: [] tags: - name: Orders description: Customer purchases and their lifecycle. paths: /orders: get: operationId: listOrders tags: - Orders summary: List orders description: Receive a paginated list of all orders. parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PerPage' - name: status in: query required: false description: Filter by order status (e.g. open, closed, cancelled, any). schema: type: string responses: '200': description: A list of orders. content: application/json: schema: type: array items: $ref: '#/components/schemas/Order' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/RateLimited' post: operationId: createOrder tags: - Orders summary: Create an order description: Create a new order. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrderInput' responses: '201': description: The created order. content: application/json: schema: $ref: '#/components/schemas/Order' '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/ValidationError' /orders/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getOrder tags: - Orders summary: Get an order description: Receive a single order by its id. responses: '200': description: The requested order. content: application/json: schema: $ref: '#/components/schemas/Order' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: operationId: updateOrder tags: - Orders summary: Update an order description: Change order attributes and/or update status. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OrderInput' responses: '200': description: The updated order. content: application/json: schema: $ref: '#/components/schemas/Order' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /orders/{id}/history/values: parameters: - $ref: '#/components/parameters/Id' get: operationId: getOrderValueHistory tags: - Orders summary: Get order value history description: Receive the value-alteration history of an order. responses: '200': description: The order value history. content: application/json: schema: type: array items: type: object '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /orders/{id}/history/editions: parameters: - $ref: '#/components/parameters/Id' get: operationId: getOrderEditionHistory tags: - Orders summary: Get order edition history description: Receive the edition history of an order. responses: '200': description: The order edition history. content: application/json: schema: type: array items: type: object '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /orders/{id}/subscriptions: parameters: - $ref: '#/components/parameters/Id' get: operationId: getOrderSubscriptions tags: - Orders summary: Get order subscriptions description: Receive the subscriptions associated with an order. responses: '200': description: The order subscriptions. content: application/json: schema: type: array items: type: object '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /orders/{id}/close: parameters: - $ref: '#/components/parameters/Id' post: operationId: closeOrder tags: - Orders summary: Close an order description: Close an order. responses: '200': description: The closed order. content: application/json: schema: $ref: '#/components/schemas/Order' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /orders/{id}/open: parameters: - $ref: '#/components/parameters/Id' post: operationId: openOrder tags: - Orders summary: Re-open an order description: Re-open a previously closed order. responses: '200': description: The re-opened order. content: application/json: schema: $ref: '#/components/schemas/Order' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /orders/{id}/cancel: parameters: - $ref: '#/components/parameters/Id' post: operationId: cancelOrder tags: - Orders summary: Cancel an order description: Cancel an order. responses: '200': description: The cancelled order. content: application/json: schema: $ref: '#/components/schemas/Order' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: schemas: Customer: allOf: - type: object properties: id: type: integer format: int64 created_at: type: string format: date-time - $ref: '#/components/schemas/CustomerInput' OrderInput: type: object properties: status: type: string enum: - open - closed - cancelled payment_status: type: string shipping_status: type: string owner_note: type: string products: type: array items: type: object additionalProperties: true additionalProperties: true CustomerInput: type: object properties: name: type: string email: type: string format: email phone: type: string identification: type: string note: type: string addresses: type: array items: type: object additionalProperties: true additionalProperties: true Error: type: object properties: code: type: integer message: type: string description: type: string additionalProperties: true Order: allOf: - type: object properties: id: type: integer format: int64 number: type: integer token: type: string currency: type: string total: type: string customer: $ref: '#/components/schemas/Customer' created_at: type: string format: date-time - $ref: '#/components/schemas/OrderInput' parameters: Id: name: id in: path required: true description: The numeric resource id. schema: type: integer format: int64 PerPage: name: per_page in: query required: false description: Results per page (max 200). schema: type: integer default: 30 maximum: 200 Page: name: page in: query required: false description: Page number for pagination. schema: type: integer default: 1 responses: ValidationError: description: The request payload failed validation. content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: Missing or malformed `Authentication` header, or invalid token. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' RateLimited: description: Too many requests - the per-store leaky bucket overflowed. Inspect the x-rate-limit-limit, x-rate-limit-remaining, and x-rate-limit-reset headers and back off. headers: x-rate-limit-limit: schema: type: integer description: Total requests the bucket can hold. x-rate-limit-remaining: schema: type: integer description: Remaining capacity before the bucket fills. x-rate-limit-reset: schema: type: integer description: Milliseconds remaining to completely empty the bucket. content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: authenticationHeader: type: apiKey in: header name: Authentication description: 'NON-STANDARD auth header. Send the OAuth 2 access token as `Authentication: bearer ACCESS_TOKEN` - the header name must be `Authentication` (not `Authorization`) and the `bearer` prefix must be lowercase, or the API returns 401. A descriptive `User-Agent` header is also required on every request.'