> ## Documentation Index
> Fetch the complete documentation index at: https://ayuda.gudink.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Inicio rápido de la API: tu primer pedido en cinco llamadas

> De la clave al primer pedido creado por API: probar la clave, listar productos, cotizar el envío, crear el pedido y consultarlo. Con ejemplos para copiar, contra el entorno de pruebas.

Esta página te lleva de la clave al primer pedido en cinco llamadas. Los detalles de cada una están en las páginas siguientes.

## Lo básico

| | |
| - | - |
| URL base de pruebas | `https://staging.gudink.com/api/v1` |
| URL base de producción | `https://app.gudink.com/api/v1` |
| Autenticación | Cabecera `Authorization: Bearer <clave>`. Clave de pruebas: `gk_stg_…`. Clave de producción: `gk_live_…` |
| Formato | JSON, campos en `snake_case` en inglés |
| Importes | Enteros en pesos argentinos (ARS), con IVA incluido. Nunca decimales, nunca centavos |
| Fechas | ISO 8601 en UTC con `Z` (`2026-10-02T15:04:05.000Z`) |
| Errores | `{ "error": { "code", "message", "details" } }`. El mensaje está en castellano, para una persona. Decidí por `code`, nunca por el texto |
| `User-Agent` | Obligatorio en la práctica: mandá uno propio que diga quién sos |

La API se usa de servidor a servidor. No funciona desde un navegador, a propósito: la clave nunca tiene que llegar al dispositivo de tu comprador.

**Mandá siempre una cabecera `User-Agent` propia**, por ejemplo `MiTienda/1.0 (+https://mitienda.com)`. La red que está delante de la API puede rechazar el que algunas librerías mandan por defecto (pasa con `urllib` de Python) con un **403 que no es JSON** (un texto como `error code: 1010`), incluso en `GET /llms.txt`. Ese 403 no tiene que ver con tu clave: ver [Respuestas que no son de la API](/api/errores-y-limites#respuestas-que-no-son-de-la-api). `curl` ya manda uno propio, así que los ejemplos de esta página andan tal cual.

## Antes de la primera llamada

Los ejemplos usan dos variables de entorno, para que ningún comando le pegue a producción por accidente. Definilas una vez:

```bash theme={null}
export GUDINK_API_BASE="https://staging.gudink.com/api/v1"
export GUDINK_API_KEY="gk_stg_..."   # tu clave de pruebas; nunca la escribas en el código
```

Así apuntan al [entorno de pruebas](/api/entorno-de-pruebas), donde nada se produce, se envía ni se cobra. En producción no hay modo de prueba. Para pasar a producción cambian las dos variables, nada más: `GUDINK_API_BASE="https://app.gudink.com/api/v1"` y una clave `gk_live_`.

## 1. Probá la clave

```bash theme={null}
curl -sS "$GUDINK_API_BASE/me" \
  -H "Authorization: Bearer $GUDINK_API_KEY"
```

```json theme={null}
{
  "id": 412,
  "name": "Remeras del Sur",
  "billing_complete": true,
  "missing_billing_fields": []
}
```

Si `billing_complete` es `false`, completá tus datos de facturación en el panel antes de seguir: sin ellos `POST /orders` responde 403 `billing_data_required`.

## 2. Listá tus productos

```bash theme={null}
curl -sS "$GUDINK_API_BASE/products?limit=25" \
  -H "Authorization: Bearer $GUDINK_API_KEY"
```

De la respuesta guardá, por cada variante, el `id` del producto (`product_id`) y el `id` de la variante (`variant_id`), siempre como par: el mismo `variant_id` aparece en varios productos, con precios distintos. Ese par es lo que vas a mandar al cotizar y al crear el pedido.

## 3. Cotizá el envío

```bash theme={null}
curl -sS "$GUDINK_API_BASE/shipping/quotes" \
  -H "Authorization: Bearer $GUDINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "postal_code": "C1043AAZ",
    "items": [{ "product_id": 812, "variant_id": 4410, "quantity": 2 }]
  }'
```

Te devuelve un `quote_id`, la `province` de ese código postal y una lista de `options`, cada una con su `service_code` (`opt_1`, `opt_2`, ...), su `type` y su `price`. `type` es `home` (envío a domicilio) o `pickup` (retiro en sucursal, con la lista de sucursales en `pickup_points`). Mostrale las opciones a tu comprador. Guardá el `quote_id`, el `service_code` elegido y la `province`. Los dos primeros van juntos dentro de `shipping` al crear el pedido.

Si responde 400 `province_required`, la API no reconoce ese código postal: pedile la provincia a tu comprador y repetí la llamada sumando `"province"`. Ver [Provincias](/api/productos-y-envio#provincias).

## 4. Creá el pedido

Cuando la plata de tu comprador está acreditada (no cuando el pedido se registra):

```bash theme={null}
curl -sS "$GUDINK_API_BASE/orders" \
  -H "Authorization: Bearer $GUDINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "external_id": "woo-k7p2-10432",
    "items": [{ "product_id": 812, "variant_id": 4410, "quantity": 2 }],
    "recipient": { "name": "Ana Pérez", "phone": "+54 9 11 5555 5555" },
    "shipping_address": {
      "street": "Av. Corrientes",
      "number": "1234",
      "floor": "3",
      "apartment": "B",
      "city": "CABA",
      "province": "Capital Federal",
      "postal_code": "C1043AAZ"
    },
    "shipping": { "quote_id": "<el quote_id del paso 3>", "service_code": "<el de la opción elegida>" }
  }'
```

Este ejemplo es un envío a domicilio. Si tu comprador elige retirar en una sucursal, el pedido no lleva `shipping_address`: en `shipping` va también el `pickup_point_id` de la sucursal elegida. Ver [Retiro en sucursal](/api/pedidos#retiro-en-sucursal).

* `external_id` identifica el pedido en toda tu cuenta de Gudink, para siempre. **No uses sólo el número de pedido de tu tienda**, que se repite si reinstalás, si tenés una copia de pruebas de tu sitio o si conectás más de una tienda: armalo con un prefijo propio de tu instalación más tu número de pedido (`woo-k7p2-10432`, donde `k7p2` es un código que generás una sola vez al instalar). Ver [No duplicar pedidos](/api/pedidos#no-duplicar-pedidos).
* Si la conexión se corta y no sabés si se creó, repetí la misma llamada con el mismo `external_id` y el mismo cuerpo: no se duplica.
* En `shipping_address.province` mandá la `province` que devolvió la cotización.
* Después de cada `200` o `201`, mirá `status`: un reintento de un pedido que ya se canceló devuelve `200` con `status: "cancelled"`. Ver [Qué mirar después de cada 200 o 201](/api/pedidos#que-mirar-despues-de-cada-200-o-201).

La respuesta `201` trae el pedido con `status: "pending_payment"`, los importes y `payment.pay_url`, que es donde lo pagás vos desde tu panel. En el entorno de pruebas no lo pagues: usá la [simulación](/api/entorno-de-pruebas#simular-el-recorrido-de-un-pedido).

## 5. Consultá el pedido

```bash theme={null}
curl -sS "$GUDINK_API_BASE/orders/1043" \
  -H "Authorization: Bearer $GUDINK_API_KEY"
```

O, mejor, dejá de consultar y recibí un aviso cada vez que cambia: ver [Avisos (webhooks)](/api/avisos).

## Qué sigue

* [Entorno de pruebas](/api/entorno-de-pruebas): cómo hacer avanzar el pedido hasta entregado sin plata y el recorrido de prueba completo.
* [Claves y autenticación](/api/claves-y-autenticacion): cómo cuidar la clave y qué responde la API cuando algo falla al entrar.
* [Productos y envío](/api/productos-y-envio): el catálogo en detalle, las imágenes, cada cuánto sincronizar y las reglas de la cotización.
* [Pedidos](/api/pedidos): idempotencia, formato de cada campo, pago, vencimiento, estados y cancelación.
* [Errores y límites](/api/errores-y-limites): la tabla completa de códigos, qué trae cada error y cómo reintentar.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.