Carrinho
Visão Geral
O carrinho de compras é um dos principais componentes de um e-commerce.
Ele permite que o cliente adicione e gerencie múltiplos produtos em um único pedido, armazenando temporariamente os itens selecionados.
Além disso, o carrinho pode oferecer recursos como aplicação de cupons de desconto, promoções, cálculo de frete, atualização de quantidades e visualização do valor total da compra.
Autenticação
Os endpoints de carrinho não exigem autenticação na maioria dos casos.
A exceção ocorre em funcionalidades promocionais relacionadas ao sistema de pontos e à carteira do cliente, que exigem vínculo com o usuário para validação.
Token
O carrinho pode ser criado a partir de quase todos os endpoints, retornando um token no header da resposta, que deve ser armazenado e reutilizado nas requisições seguintes.
Esse token representa o carrinho atual e permite a utilização sem autenticação.
Caso ele seja perdido, ao realizar qualquer nova solicitação, um novo carrinho e token serão gerados automaticamente.
Embora o token seja retornado inicialmente via header, nas requisições subsequentes ele será enviado por meio de cookie.
Entidades relacionadas
Promocional Cupom
No contexto do carrinho, o cupom permite a aplicação de descontos por meio de um hash que representa um cupom específico.
Essa aplicação envolve regras e período de validade, sendo uma forma simples para o lojista oferecer descontos à loja ou a clientes específicos.
Em geral, apenas quem gera o cupom conhece seu hash e define para quem ele será distribuído.
Promocional Carteira
A carteira do cliente é uma entidade que armazena valores disponíveis, provenientes de cartões-presente, vouchers ou outras ações promocionais.
Em alguns casos, pode conter valores de estornos de compras que não foram concluídas corretamente.
Esse saldo pode ser utilizado no carrinho como forma de pagamento ou desconto.
Promocional Sistema de Pontos
O sistema de pontos premia o cliente após cada compra, permitindo o acúmulo de pontos que podem ser convertidos em descontos para compras futuras.
No carrinho, esses pontos podem ser aplicados para redução do valor total ou, caso o saldo seja suficiente, para pagamento integral de um produto ou serviço.
Produtos de Upsell
Os produtos de upsell são sugestões exibidas, geralmente, no checkout, oferecendo algum desconto adicional com base nos itens presentes no carrinho.
Cada item pode atender a regras específicas de segmentação, fazendo com que determinados produtos sejam exibidos como oferta.
Compre Junto
Produtos de compre junto são sugestões complementares ao produto principal.
Quando o item sugerido é adicionado ao carrinho, pode ser aplicado um desconto, conforme a configuração definida pelo lojista.
Notas e Considerações
O carrinho é recalculado constantemente e passa repetidamente pelos mesmos processos a cada endpoint acionado.
Por esse motivo, alguns erros podem se repetir em diferentes operações.
Nesta documentação, foram priorizados os erros mais relevantes dentro do contexto específico de cada endpoint.
Cadastro de cliente no carrinho
/cart/customer
Cadastra o cliente pelo checkout e vincula ao carrinho
Descrição
Endpoint responsável por cadastrar um cliente diretamente no carrinho, durante o checkout, permitindo que o fluxo de compra seja mantido sem interrupções.
Dessa forma, o cliente preserva seu carrinho e obtém um cadastro prévio no momento da compra.
É importante destacar que esse cadastro é restrito ao carrinho e não representa um cadastro definitivo na loja.
Parâmetros de query
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Content-Type | application/json | Tipo de conteúdo |
Parâmetros do Corpo
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
e-mail | string | ✅ | Email do cliente (max 255 caracteres) |
password | string | ✅ | Senha do cliente (max 255 e min 6 caracteres) |
Exemplo de Requisição
1curl --request POST \2 --url {{MAIN_URL}}/login \3 --header "Authorization: Bearer SEU_TOKEN_AQUI" \4 --cookie "CartToken" \5 --data '{6 "email": "cliente@exemplo.com",7 "password": "123456"8 }'✅ Resposta de Sucesso
HTTP Status: 200 OK
1{2 "id": "abc12345678900",3 "countryCode": "",4 "quoteZipcode": "",5 "subtotalValue": 0,6 "shippingValue": 0,7 "discountValue": 0,8 "additionValue": 0,9 "totalValue": 0,10 "discountPreview": {11 "cashDiscount": {12 "discountPercentage": -10,13 "discountValue": 0,14 "valueWithDiscount": 015 },16 "pointSystem": null17 },18 "installments": [19 {20 "installment": 1,21 "installmentValue": 0,22 "totalValue": 0,23 "fee": 0,24 "feeTotalValue": 025 }26 ],27 "requestedProductMap": [],28 "discountMap": {29 "promotion": [],30 "coupon": null,31 "customer-wallet": null,32 "point-system": null33 },34 "customer": {35 "customerId": null,36 "nameCorporateName": "maria",37 "tradeName": "maria",38 "email": "maria@email.com.br",39 "document": "321654987",40 "gender": "undefined",41 "isCorporate": true,42 "nationality": "BRA",43 "birthdate": "2001-01-16",44 "phone": "+5511123456789"45 },46 "addresses": [],47 "orders": [],48 "errors": [],49 "isMerged": false,50 "createdAt": "2026-01-23 14:28:47",51 "updatedAt": "2026-01-23 14:28:47"52}⚠️ Possíveis erros:
Atenção: a seguir estão destacados os principais erros que podem ocorrer neste endpoint.
Os cenários descritos representam os erros mais relevantes do contexto atual, servindo como referência para entendimento e tratamento das falhas.
| Código Interno | Código Http | Descrição |
|---|---|---|
| UAPPI_STORE_CART_CUSTOMER_IS_ALREADY_DEFINED | 409 | O carrinho já tem um cliente definido. |
Cadastro de endereço no carrinho
/cart/address
Possibilita que o cliente cadastre endereço no carrinho
Descrição
Endpoint responsável por permitir que um cliente cadastre até dois endereços em um carrinho: um endereço de cobrança e outro de entrega.
Caso seja informado apenas um endereço, ele deverá ser configurado para ambas as finalidades (cobrança e entrega).
É importante destacar que o endereço é cadastrado de forma independente no carrinho, não possuindo, necessariamente, vínculo com o cliente ou com outras entidades da plataforma.
Parâmetros de query
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Content-Type | application/json | Tipo de conteúdo |
Parâmetros do Corpo
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
addresses | array | ✅ | lista de endereços que devem ser cadastrados no carrinho (min: 1, max: 2) |
addresses.*.type | enum | ✅ | define o tipo de endereço (billing, delivery, both)/(cobrança, entrega ou ambos) |
addresses.*.recipient | string | ✅ | determina quem vai receber a entrega |
addresses.*.identification | string | ✅ | algo único para identificação do destinatário |
addresses.*.countryCode | string | ✅ | Código do país cujo endereço pertence (Exemplo: BRA, min:3, max: 3) |
addresses.*.stateCode | string | ✅ | Código do estado cujo endereço pertence (Exemplo: SP, max: 10) |
addresses.*.stateCode | string | ✅ | Estado em que o endereço pertence (max: 100) |
addresses.*.zipCode | string | ✅ | Código postal (CEP) do endereço (max: 15) |
addresses.*.complement | string | ❌ | Complemento do endereço (opcional - max:100 ) |
addresses.*.district | string | ✅ | Bairro do endereço (max: 60) |
addresses.*.street | string | ✅ | Rua do endereço (max: 60) |
addresses.*.street | string | ✅ | Número residencial (max: 10) |
Exemplo de Requisição
1curl --request POST \2 --url {{MAIN_URL}}/cart/address \3 --cookie "cartToken" \4 --data '{5 "addresses": [6 {7 "type":"delivery",8 "recipient":"recipeTest",9 "identification":"Casa",10 "street":"Rua xxxx",11 "number":"1111",12 "zipCode":"823752678",13 "city":"Birigui",14 "complement":"",15 "district":"centro",16 "state":"São Paulo",17 "stateCode":"BR-SP",18 "countryCode":"BRA"19 }20 ]21 }'✅ Resposta de Sucesso
HTTP Status: 200 OK
1{2 "id": "abc123456789086543",3 "countryCode": "",4 "quoteZipcode": "",5 "subtotalValue": 0,6 "shippingValue": 0,7 "discountValue": 0,8 "additionValue": 0,9 "totalValue": 0,10 "discountPreview": {11 "cashDiscount": {12 "discountPercentage": -10,13 "discountValue": 0,14 "valueWithDiscount": 015 },16 "pointSystem": null17 },18 "installments": [19 {20 "installment": 1,21 "installmentValue": 0,22 "totalValue": 0,23 "fee": 0,24 "feeTotalValue": 025 }26 ],27 "requestedProductMap": [],28 "discountMap": {29 "promotion": [],30 "coupon": null,31 "customer-wallet": null,32 "point-system": null33 },34 "customer": {35 "customerId": null,36 "nameCorporateName": "maria",37 "tradeName": "maria",38 "email": "email@address.com.br",39 "document": "321654987",40 "gender": "undefined",41 "isCorporate": true,42 "nationality": "BRA",43 "birthdate": "2001-01-16",44 "phone": "+5511123456789"45 },46 "addresses": [],47 "orders": [],48 "errors": [],49 "isMerged": false,50 "createdAt": "2026-01-23 14:28:47",51 "updatedAt": "2026-01-23 14:28:47"52}Vínculo de endereço do cliente ao carrinho
/cart/address
Permite que o cliente vincule um endereço já cadastrado a um carrinho
Descrição
Endpoint responsável por permitir que o cliente vincule endereços previamente cadastrados ao carrinho atual 🛒.
É possível associar até dois endereços por carrinho, atendendo cenários comuns de compra onde cobrança e entrega ocorrem em locais diferentes.
Nesse contexto, um endereço é utilizado para cobrança enquanto o outro é destinado à entrega, garantindo flexibilidade no fluxo de checkout e melhor adequação às regras de negócio.
Parâmetros de query
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Content-Type | application/json | Tipo de conteúdo |
Authorization | Bearer {customerToken} | Token de autenticação |
Parâmetros do Corpo
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
addresses | array | ✅ | lista de endereços que devem ser vinculados (max: 2) |
addresses.*.addressId | integer | ✅ | Identificador do endereço que deve ser vinculado |
addresses.*.type | enum | ✅ | Determina o tipo do endereço (both, billing, delivery)/(ambos, cobrança, entrega). A opção "both" só é aceita para um único endereço. |
Exemplo de Requisição
1curl --request PUT \2 --url {{MAIN_URL}}/cart/address \3 --header "Authorization: Bearer customerToken" \4 --data '{5 "addresses": [6 {7 "addressId": 1,8 "addressType": "both"9 }10 ]11}✅ Resposta de Sucesso
HTTP Status: 200 OK
1{2 "id": "abc1234567890321",3 "countryCode": "",4 "quoteZipcode": "",5 "subtotalValue": 0,6 "shippingValue": 0,7 "discountValue": 0,8 "additionValue": 0,9 "totalValue": 0,10 "discountPreview": {11 "cashDiscount": {12 "discountPercentage": -10,13 "discountValue": 0,14 "valueWithDiscount": 015 },16 "pointSystem": null17 },18 "installments": [19 {20 "installment": 1,21 "installmentValue": 0,22 "totalValue": 0,23 "fee": 0,24 "feeTotalValue": 025 }26 ],27 "requestedProductMap": [],28 "discountMap": {29 "promotion": [],30 "coupon": null,31 "customer-wallet": null,32 "point-system": null33 },34 "customer": {35 "customerId": 3,36 "nameCorporateName": "Eric",37 "tradeName": "",38 "email": "customer@email.com.br",39 "document": "",40 "gender": "male",41 "isCorporate": false,42 "nationality": "BRA",43 "birthdate": "2001-01-16",44 "phone": "+12345678912"45 },46 "addresses": [],47 "orders": [],48 "errors": [],49 "isMerged": false,50 "createdAt": "2026-01-23 13:01:35",51 "updatedAt": "2026-01-23 13:01:35"52}⚠️ Possíveis erros:
Atenção: a seguir estão destacados os principais erros que podem ocorrer neste endpoint.
Os cenários descritos representam os erros mais relevantes do contexto atual, servindo como referência para entendimento e tratamento das falhas.
| Código Interno | Código Http | Descrição |
|---|---|---|
| UAPPI_STORE_CART_ADDRESS_TYPE_BOTH_IS_REQUIRED | 400 | Para apenas um endereço, o tipo deve ser "ambos". |
| UAPPI_STORE_CART_ADDRESS_TYPE_PAIR_IS_REQUIRED | 400 | For two addresses, one must be a delivery address and the other a billing address. |
| UAPPI_STORE_CART_CUSTOMER_IS_REQUIRED | 401 | O cliente é requerido. |
| UAPPI_STORE_CART_ADDRESS_NOT_FOUND | 404 | O endereço do cliente não foi encontrado. |