Skip to main content

Estado actual

La API pública de La Pyme hoy convive en dos superficies:
  • v1: endpoints legacy orientados a CRUD y listados clásicos.
  • v2: endpoints machine-first para flujos operativos que necesitan validación previa, idempotencia y respuestas más estables para agentes u otras apps.
Hoy v2 cubre el slice de compras y los recursos de descubrimiento necesarios para completarlo sin acceso a la base de datos.

Qué cambia en v2

En v2 no asumimos que todas las operaciones son un CRUD simple. Por eso el contrato cambia en tres puntos:
  • Las escrituras transaccionales pueden separar preview y commit.
  • Los errores usan una envoltura estructurada con requestId, code, retryable y details.
  • Los commits retryables requieren Idempotency-Key.

Success response de lectura

{
  "requestId": "req_123",
  "success": true,
  "data": [],
  "pagination": {
    "page": 1,
    "limit": 50,
    "total": 0,
    "totalPages": 1
  }
}

Error response de v2

{
  "requestId": "req_123",
  "success": false,
  "error": {
    "code": "PRECONDITION_FAILED",
    "message": "La compra no puede confirmarse hasta resolver los bloqueos del preview.",
    "retryable": false,
    "details": [
      {
        "path": "input.items",
        "code": "INVENTORY",
        "message": "Stock insuficiente. Stock actual: -34, cambio solicitado: 1"
      }
    ]
  }
}

Flujo recomendado para compras

  1. Listá o buscá el proveedor con GET /api/v2/suppliers.
  2. Listá o buscá productos con GET /api/v2/products.
  3. Si vas a marcar productsReceived: true, descubrí la ubicación con GET /api/v2/warehouses.
  4. Ejecutá POST /api/v2/purchases con mode: "preview".
  5. Si blockingIssues está vacío, repetí el mismo payload con mode: "commit" y un Idempotency-Key.
  6. Consultá la compra creada con GET /api/v2/purchases o GET /api/v2/purchases/{purchaseId}.
preview no escribe nada. commit sí escribe y exige reusar el mismo Idempotency-Key si repetís la misma operación por retry o timeout.

Endpoints disponibles hoy en v2

  • GET /api/v2/suppliers
  • GET /api/v2/products
  • GET /api/v2/warehouses
  • GET /api/v2/purchases
  • GET /api/v2/purchases/{purchaseId}
  • POST /api/v2/purchases

Ejemplo de commit

curl -X POST "https://api.lapyme.com.ar/api/v2/purchases" \
  -H "Authorization: Bearer TU_API_KEY_AQUI" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 2bb0c70a-8787-4186-9678-c8156206db16" \
  -d '{
    "mode": "commit",
    "client": {
      "requestId": "req_purchase_commit_1",
      "agent": {
        "name": "external-purchasing-agent",
        "version": "1.0.0"
      }
    },
    "input": {
      "supplierId": "afafcbec-9d94-4174-8d5c-ec8d72780947",
      "voucherType": 1,
      "supplierInvoiceNumber": "0001-00000001",
      "invoiceDate": "2026-03-10",
      "currency": "PES",
      "exchangeRate": 1,
      "productsReceived": false,
      "items": [
        {
          "productId": "9c692e8b-0f9a-4f7c-8b99-061a2eb188ae",
          "quantity": 1,
          "unitCost": 8250
        }
      ]
    }
  }'

Scopes

Los scopes mínimos para este slice son:
  • suppliers:read
  • products:read
  • warehouses:read
  • purchases:read
  • purchases:write
Podés ver cada endpoint en detalle en la referencia OpenAPI de esta misma sección.