Sua primeira requisição
Tutorial ponta a ponta: autenticar, listar produtos, criar um cliente e criar um pedido.
Neste tutorial você faz o ciclo mínimo de uma integração de vendas: entra na loja, escolhe um produto, cadastra um comprador e registra um pedido para ele. No final, você apaga o que criou. Leva poucos minutos e usa só as rotas que quase toda integração precisa.
Antes de começar
Você precisa de:
- A URL base da loja (
$BASE_URL, veja Endereço e ambientes). - O e-mail e a senha de um usuário administrador da loja.
- Um terminal com
curlejq, ou Node.js 18 ou superior, ou Python comrequests.
export BASE_URL="https://minhaloja.io.venddor.com.br"O fluxo
- Autenticar
Troque e-mail e senha por um
access_token(Autenticação). Todos os passos seguintes enviam esse token.bashTOKEN=$(curl -s -X POST "$BASE_URL/api/v1/auth/login" \ -H "Content-Type: application/json" \ -d '{"email": "integracao@minhaloja.com.br", "password": "sua-senha"}' \ | jq -r .access_token) - Listar produtos
Busque um produto pelo nome (
search). A lista é paginada:per_pagedefine o tamanho da página e a resposta traztotaletotal_pages.bashcurl -s "$BASE_URL/api/v1/admin/products?search=Slim%20Rosa&per_page=2" \ -H "Authorization: Bearer $TOKEN"200Produtos encontradosjson{ "products": [ { "id": "c3f92551-9dda-4fc7-b518-353d1c4e4035", "name": "Notebook Slim Rosa 02373", "sku": "SD-002373", "price": 11500, "price_str": "115.00", "quantity": 51, "status": "A", "created_at": "2026-05-27T12:47:04Z" } ], "total": 43, "page": 1, "per_page": 2, "total_pages": 22 }Guarde o
iddo produto (UUID). Opriceestá em centavos:11500é R$ 115,00. O campoprice_strtraz o mesmo valor como string decimal. A resposta real tem muitos outros campos; aqui estão só os principais. - Escolher o frete e a forma de pagamento
Um pedido de produto físico precisa de um método de frete, e todo pedido precisa do código da forma de pagamento. Leia os dois cadastros da loja e guarde o
iddo frete e ocodedo pagamento.bashcurl -s "$BASE_URL/api/v1/admin/shipping-methods" -H "Authorization: Bearer $TOKEN" curl -s "$BASE_URL/api/v1/admin/payment-methods" -H "Authorization: Bearer $TOKEN"As duas respostas têm a lista dentro de
methods. Em cada item de frete você usaid; em cada forma de pagamento,code(por exemplopix,boletooupagamento-na-entrega). - Criar um cliente
POST /api/v1/admin/userscadastra o comprador.email,passwordefirst_namesão obrigatórios. Comuser_typeigual acustomer, ele é um comprador (e não um administrador).bashCUSTOMER_ID=$(curl -s -X POST "$BASE_URL/api/v1/admin/users" \ -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \ -d '{ "email": "maria.souza@example.com", "password": "Senha#12345", "first_name": "Maria", "last_name": "Souza", "user_type": "customer" }' | jq -r .id)201Cliente criadojson{ "id": "9781e019-a0c1-4cc5-bbd2-16ef86e1c999", "email": "maria.souza@example.com", "user_type": "customer", "status": "A", "first_name": "Maria", "last_name": "Souza", "language": "pt-BR", "currency": "BRL", "person_type": "F", "created_at": "2026-10-11T20:50:31.04207Z" }Guarde o
id(UUID). Se o e-mail já existir, a resposta é400com{"error":"email already registered"}. - Criar o pedido
Junte tudo: o cliente, os itens, o endereço de entrega, o frete e a forma de pagamento. Envie sempre um
idempotency_keyseu: se a chamada falhar por timeout e você repetir, a plataforma devolve o mesmo pedido em vez de criar outro.bashcurl -s -X POST "$BASE_URL/api/v1/admin/orders" \ -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \ -d '{ "customer_id": "9781e019-a0c1-4cc5-bbd2-16ef86e1c999", "payment_method": "pagamento-na-entrega", "shipping_method_id": "85e87a54-dcee-4947-8cfa-f6406f2f3cbb", "idempotency_key": "tutorial-pedido-0001", "items": [ { "product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035", "quantity": 1 } ], "shipping_address": { "first_name": "Maria", "last_name": "Souza", "address_line1": "Avenida Paulista, 1000", "city": "São Paulo", "state": "SP", "postal_code": "01310-100", "country": "BR", "phone": "11999990000" } }'201Pedido criado (resumo)json{ "order": { "id": "819887d3-069f-4f33-91fa-ea8693d3b5c9", "order_number": "PEDIDO-20261011-0007", "customer_id": "9781e019-a0c1-4cc5-bbd2-16ef86e1c999", "subtotal": 11500, "shipping_total": 500, "tax_total": 0, "discount_total": 0, "total": 12000, "currency": "BRL", "payment_method": "pagamento-na-entrega", "payment_status": "pending", "status": "O", "status_text": "pending", "created_at": "2026-10-11T20:50:36.891371777Z" }, "items": [ { "product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035", "product_name": "Notebook Slim Rosa 02373", "product_sku": "SD-002373", "unit_price": 11500, "quantity": 1, "total": 11500 } ] }O pedido nasce com
statusO(pendente). O preço vem do catálogo, não do seu corpo, e o frete é recalculado pela plataforma: R$ 115,00 de produto mais R$ 5,00 de frete dão12000centavos. Repita a mesma chamada com o mesmoidempotency_keye você recebe o mesmo pedido de volta (mesmoid), sem duplicar nada.
Parabéns: você autenticou, leu o catálogo e gravou um cliente e um pedido. Para o que fazer a seguir com o pedido (alterar status, criar remessa, cancelar), veja Pedidos.
Limpeza
Num pedido de verdade, o caminho normal é cancelar (DELETE /api/v1/admin/orders/{id}), que mantém o registro e devolve o estoque. Para um pedido de teste que nunca deveria ter existido, a exclusão permanente remove o registro por completo. Ela é irreversível: use só em dados de teste. Apague o pedido antes do cliente.
curl -s -X DELETE "$BASE_URL/api/v1/admin/orders/$ORDER_ID/permanent" -H "Authorization: Bearer $TOKEN"
curl -s -X DELETE "$BASE_URL/api/v1/admin/users/$CUSTOMER_ID" -H "Authorization: Bearer $TOKEN"As duas respostas são 200: {"deleted": true, "permanent": true} e {"message": "user deleted"}. As variações de cancelamento e a exclusão permanente estão em Cancelar e excluir.
Erros comuns neste fluxo
400 at least one item is required: a listaitemsveio vazia ou ausente.401 invalid or expired token: o token venceu; renove ou faça login de novo.403 insufficient privileges: o usuário não tem permissão de gerenciar pedidos ou usuários.400no frete: produto físico semshipping_method_id.priceparece 100 vezes maior: o preço é em centavos, não em reais.429: muitos logins em pouco tempo. Guarde o token (Limites e boas práticas).