openapi: 3.0.3 info: title: Nuvemshop / Tiendanube Admin Categories Customers 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: Customers description: Registered customer accounts. paths: /customers: get: operationId: listCustomers tags: - Customers summary: List customers description: Receive a list of all customers. parameters: - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PerPage' responses: '200': description: A list of customers. content: application/json: schema: type: array items: $ref: '#/components/schemas/Customer' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createCustomer tags: - Customers summary: Create a customer description: Create a new customer. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CustomerInput' responses: '201': description: The created customer. content: application/json: schema: $ref: '#/components/schemas/Customer' '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/ValidationError' /customers/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getCustomer tags: - Customers summary: Get a customer description: Receive a single customer. responses: '200': description: The requested customer. content: application/json: schema: $ref: '#/components/schemas/Customer' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: operationId: updateCustomer tags: - Customers summary: Update a customer description: Modify an existing customer. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CustomerInput' responses: '200': description: The updated customer. content: application/json: schema: $ref: '#/components/schemas/Customer' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteCustomer tags: - Customers summary: Delete a customer description: Delete a customer. responses: '200': description: Deletion confirmation (empty object). content: application/json: schema: type: object '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: 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 schemas: Customer: allOf: - type: object properties: id: type: integer format: int64 created_at: type: string format: date-time - $ref: '#/components/schemas/CustomerInput' Error: type: object properties: code: type: integer message: type: string description: type: string 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 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' 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.'