Ordenes
Endpoints para listar, obtener y crear ordenes via la API REST de Karrito.
Listar ordenes
GET /api/v1/ordersDevuelve una lista paginada de las ordenes de tu tienda, ordenadas por fecha de creacion (mas recientes primero).
Parametros de query
| Parametro | Tipo | Default | Descripcion |
|---|---|---|---|
limit |
number | 50 | Resultados por pagina (max 100) |
offset |
number | 0 | Resultados a saltar |
status |
string | - | Filtrar por estado (opcional) |
Valores de status
| Status | Descripcion |
|---|---|
pending |
Pedido recibido, sin confirmar |
confirmed |
Pedido confirmado por el vendedor |
shipped |
Pedido enviado |
delivered |
Pedido entregado |
cancelled |
Pedido cancelado |
Ejemplo con curl
# Todos los pedidos
curl "https://karrito.shop/api/v1/orders?limit=20" \
-H "Authorization: Bearer krt_live_a1b2c3d4e5f6g7h8i9j0"
# Solo pedidos pendientes
curl "https://karrito.shop/api/v1/orders?status=pending" \
-H "Authorization: Bearer krt_live_a1b2c3d4e5f6g7h8i9j0"Ejemplo con JavaScript
const response = await fetch("https://karrito.shop/api/v1/orders?status=pending", {
headers: {
"Authorization": "Bearer krt_live_a1b2c3d4e5f6g7h8i9j0"
}
});
const { data, total } = await response.json();
console.log(`${total} pedidos pendientes`);Respuesta
{
"data": [
{
"id": "clxo1a2b3c4d5e6f7g8h9",
"orderNumber": "KRT-001042",
"status": "pending",
"customerName": "Maria Rodriguez",
"customerPhone": "+18095551234",
"items": [
{
"productName": "Camisa azul clasica",
"variantName": "Talla M",
"quantity": 2,
"unitPrice": 25.00,
"subtotal": 50.00
},
{
"productName": "Pantalon negro slim",
"variantName": null,
"quantity": 1,
"unitPrice": 40.00,
"subtotal": 40.00
}
],
"total": 90.00,
"notes": "Entregar despues de las 5pm",
"createdAt": "2026-03-17T16:45:00.000Z"
}
],
"total": 156,
"limit": 50,
"offset": 0
}Obtener una orden
GET /api/v1/orders/:idDevuelve una orden individual con todos sus detalles, incluyendo datos del cliente e items.
Ejemplo con curl
curl "https://karrito.shop/api/v1/orders/clxo1a2b3c4d5e6f7g8h9" \
-H "Authorization: Bearer krt_live_a1b2c3d4e5f6g7h8i9j0"Respuesta
{
"data": {
"id": "clxo1a2b3c4d5e6f7g8h9",
"orderNumber": "KRT-001042",
"status": "pending",
"customerName": "Maria Rodriguez",
"customerPhone": "+18095551234",
"customerAddress": "Calle Principal #45, Santo Domingo",
"items": [
{
"productId": "clx1a2b3c4d5e6f7g8h9i0",
"productName": "Camisa azul clasica",
"variantId": "clxv4d5e6f7g8h9i0j1k2",
"variantName": "Talla M",
"quantity": 2,
"unitPrice": 25.00,
"subtotal": 50.00
},
{
"productId": "clx2b3c4d5e6f7g8h9i0j1",
"productName": "Pantalon negro slim",
"variantId": null,
"variantName": null,
"quantity": 1,
"unitPrice": 40.00,
"subtotal": 40.00
}
],
"total": 90.00,
"notes": "Entregar despues de las 5pm",
"shippingOption": {
"name": "Envio a domicilio",
"price": 150.00
},
"createdAt": "2026-03-17T16:45:00.000Z",
"updatedAt": "2026-03-17T16:45:00.000Z"
}
}Crear una orden
POST /api/ordersEste es un endpoint publico que no requiere autenticacion. Es el mismo que usa el catalogo de Karrito cuando un cliente hace un pedido. Puedes usarlo para crear ordenes desde tu propia app o sitio web.
Nota: Este endpoint vive en /api/orders (sin el prefijo /v1) porque es publico.
Body (JSON)
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
storeId |
string | Si | ID de la tienda |
name |
string | Si | Nombre del cliente |
phone |
string | Si | Telefono del cliente (formato E.164) |
address |
string | No | Direccion de entrega |
items |
array | Si | Productos del pedido |
items[].variantId |
string | Si | ID de la variante del producto |
items[].quantity |
number | Si | Cantidad (min 1) |
notes |
string | No | Notas adicionales del cliente |
shippingOptionId |
string | No | ID de la opcion de envio seleccionada |
Ejemplo con curl
curl -X POST "https://karrito.shop/api/orders" \
-H "Content-Type: application/json" \
-d '{
"storeId": "clxs1a2b3c4d5e6f7g8h9",
"name": "Carlos Mejia",
"phone": "+18095559876",
"address": "Av. Winston Churchill #42, Piantini",
"items": [
{ "variantId": "clxv4d5e6f7g8h9i0j1k2", "quantity": 2 },
{ "variantId": "clxv5e6f7g8h9i0j1k2l3", "quantity": 1 }
],
"notes": "Llamar antes de entregar"
}'Ejemplo con JavaScript
const order = await fetch("https://karrito.shop/api/orders", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
storeId: "clxs1a2b3c4d5e6f7g8h9",
name: "Carlos Mejia",
phone: "+18095559876",
items: [
{ variantId: "clxv4d5e6f7g8h9i0j1k2", quantity: 2 },
{ variantId: "clxv5e6f7g8h9i0j1k2l3", quantity: 1 }
]
})
});
const { id, orderNumber } = await order.json();
console.log(`Orden creada: ${orderNumber}`);Respuesta exitosa (201 Created)
{
"id": "clxo2b3c4d5e6f7g8h9i0",
"orderNumber": "KRT-001043"
}Deduplicacion
El endpoint rechaza ordenes duplicadas dentro de una ventana de 5 minutos. Si el mismo cliente (mismo telefono) envia los mismos items en ese periodo, recibes un 409 Conflict:
{
"error": "Orden duplicada detectada. Intenta de nuevo en unos minutos.",
"code": "DUPLICATE_ORDER"
}Schema de orden
| Campo | Tipo | Descripcion |
|---|---|---|
id |
string | Identificador unico (CUID) |
orderNumber |
string | Numero de orden legible (KRT-XXXXXX) |
status |
string | Estado actual del pedido |
customerName |
string | Nombre del cliente |
customerPhone |
string | Telefono del cliente |
customerAddress |
string | null | Direccion de entrega |
items |
OrderItem[] | Lista de productos del pedido |
total |
number | Total del pedido en la moneda de la tienda |
notes |
string | null | Notas adicionales del cliente |
shippingOption |
object | null | Opcion de envio seleccionada |
createdAt |
string | Fecha de creacion (ISO 8601) |
updatedAt |
string | Fecha de ultima modificacion (ISO 8601) |
Scopes requeridos
orders:readpara GET (listar y obtener)orders:writepara actualizar estado- POST
/api/ordersno requiere autenticacion
Siguiente paso
Configura webhooks para recibir notificaciones en tiempo real cuando llegan nuevos pedidos.