Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.lapyme.com.ar/llms.txt

Use this file to discover all available pages before exploring further.

Qué podés hacer

La API de La Pyme te permite leer datos operativos, crear operaciones comerciales y consultar reportes sin acceder directo a la base de datos. Los casos principales son:
  • Consultar clientes, proveedores, productos, depósitos, listas de precios, etiquetas y métodos de pago.
  • Registrar compras, ventas, transferencias y movimientos manuales de stock.
  • Aplicar ajustes masivos de costos o precios.
  • Consultar reportes agrupados de ventas, compras, pagos e inventario.

Primer request

Usá un endpoint de lectura chico para validar credenciales, scopes y formato de respuesta:
curl "https://api.lapyme.com.ar/api/v1/warehouses?limit=1" \
  -H "Authorization: Bearer YOUR_BEARER_HERE"
Las solicitudes a la API aceptan Authorization: Bearer ... con API keys o tokens OAuth delegados emitidos para clientes públicos.
La cuota de la API pública es por organización: 5000 solicitudes por hora y 120 solicitudes por minuto entre todas las credenciales de esa organización.

Convenciones

  • Las respuestas usan request_id para trazabilidad y el status HTTP como señal de éxito o error.
  • Los errores usan un envelope estructurado con type, code, message, retryable y details.
  • Los objetos de recursos incluyen object como discriminador de solo lectura, por ejemplo "object": "customer".
  • Los listados devuelven has_more y next_cursor; usá ese valor como cursor para pedir la siguiente página.
  • Las escrituras usan payloads de negocio planos: sin mode, sin input, sin client y sin meta.
  • Las escrituras que pueden crear duplicados aceptan una clave de reintento en el header Idempotency-Key; cada endpoint indica si es obligatoria u opcional.
  • Todos los importes monetarios se envían y devuelven en centavos.

Paginación

Los listados devuelven un token para pedir la siguiente página:
  • Enviá limit para controlar el tamaño de página. El máximo es 100 y el default es 50.
  • Si has_more es true, copiá next_cursor y envialo como cursor en la siguiente request.
  • No mezcles un cursor con filtros distintos. Cuando cambian filtros o búsqueda, empezá sin cursor.
  • page no está soportado.
  • Los resultados se ordenan de forma estable por el criterio del endpoint; si necesitás reconstruir un export grande, guardá el último next_cursor procesado.

Idempotencia

Las escrituras que pueden crear duplicados requieren o aceptan Idempotency-Key.
  • Obligatoria: POST /api/v1/purchases, POST /api/v1/sales, POST /api/v1/products/bulk-adjustments, POST /api/v1/stock-movements, POST /api/v1/purchase-orders y POST /api/v1/purchase-orders/{purchase_order_id}/receipts.
  • Opcional: POST /api/v1/stock-transfers.
  • Reutilizá la misma key solo para reintentar la misma operación con el mismo payload.
  • Si reutilizás una key con otro payload, la API responde 409 IDEMPOTENCY_CONFLICT.
  • Cuando una respuesta exitosa viene de un replay, el cuerpo incluye idempotent_replay: true dentro del recurso de resultado cuando aplica.
  • Para timeouts de red o respuestas 5xx, reintentá con la misma key. Para errores 4xx, corregí el payload antes de enviar una key nueva.

Respuesta de lectura

{
  "request_id": "req_123",
  "object": "list",
  "url": "/api/v1/suppliers",
  "data": [
    {
      "object": "supplier",
      "id": "550e8400-e29b-41d4-a716-446655440101",
      "name": "Supplier One"
    }
  ],
  "has_more": true,
  "next_cursor": "NEXT_CURSOR"
}

Respuesta de error

{
  "request_id": "req_123",
  "error": {
    "type": "business_error",
    "code": "PRECONDITION_FAILED",
    "message": "The purchase could not be created because a business precondition failed.",
    "retryable": false,
    "details": [
      {
        "field": "items",
        "code": "INVENTORY",
        "message": "Insufficient stock. Current stock: -34, requested change: 1"
      }
    ]
  }
}
Cada ítem de error.details puede incluir:
  • field: path lógico del campo o header relacionado.
  • code: código estable para ese detalle.
  • message: explicación legible para mostrar o registrar.

Flujo de creación de compra

  1. Buscá el proveedor con GET /api/v1/suppliers.
  2. Buscá productos con GET /api/v1/products.
  3. Si enviás products_received: true, obtené el depósito con GET /api/v1/warehouses.
  4. Enviá POST /api/v1/purchases con el payload plano y un Idempotency-Key.
  5. Si la compra se crea, revisá normalized_purchase, projected_effects y warnings en la respuesta.
  6. Obtené la compra creada con GET /api/v1/purchases/{purchase_id}.
POST /api/v1/sales sigue la misma regla: payload de negocio plano más un header Idempotency-Key obligatorio. La respuesta devuelve la venta persistida, la venta normalizada, los efectos proyectados y los warnings.
POST /api/v1/stock-transfers también usa un payload de negocio plano. Idempotency-Key es opcional: cuando se envía, el servidor puede deduplicar reintentos; cuando se omite, la operación sigue siendo válida pero no tiene protección automática contra repeticiones.

Flujo de aumento de costos por proveedor

  1. Buscá el proveedor con GET /api/v1/suppliers.
  2. Revisá los productos afectados con GET /api/v1/products.
  3. Enviá POST /api/v1/products/bulk-adjustments con target: "cost", el filtro default_supplier_id y un Idempotency-Key.
  4. La capability de comercio actualiza costos, recalcula precios base cuando un producto usa pricing automático por margen y registra efectos de sincronización para canales conectados.

Endpoints disponibles

Contactos

  • GET /api/v1/customers
  • POST /api/v1/customers
  • GET /api/v1/customers/{customer_id}
  • PUT /api/v1/customers/{customer_id}
  • GET /api/v1/suppliers
  • POST /api/v1/suppliers
  • GET /api/v1/suppliers/{supplier_id}
  • PUT /api/v1/suppliers/{supplier_id}

Productos y configuración

  • GET /api/v1/products
  • POST /api/v1/products
  • GET /api/v1/products/{product_id}
  • PUT /api/v1/products/{product_id}
  • POST /api/v1/products/bulk-adjustments
  • GET /api/v1/categories
  • POST /api/v1/categories
  • GET /api/v1/categories/{category_id}
  • PUT /api/v1/categories/{category_id}
  • GET /api/v1/price-lists
  • POST /api/v1/price-lists
  • GET /api/v1/price-lists/{price_list_id}
  • PUT /api/v1/price-lists/{price_list_id}

Compras y ventas

  • GET /api/v1/purchases
  • GET /api/v1/purchases/{purchase_id}
  • POST /api/v1/purchases
  • GET /api/v1/sales
  • POST /api/v1/sales
  • GET /api/v1/sales/{sale_id}
  • GET /api/v1/purchase-orders
  • POST /api/v1/purchase-orders
  • GET /api/v1/purchase-orders/{purchase_order_id}
  • POST /api/v1/purchase-orders/{purchase_order_id}/confirm
  • POST /api/v1/purchase-orders/{purchase_order_id}/close
  • POST /api/v1/purchase-orders/{purchase_order_id}/reopen
  • POST /api/v1/purchase-orders/{purchase_order_id}/receipts

Inventario y ubicaciones

  • GET /api/v1/inventory
  • GET /api/v1/inventory/movements
  • POST /api/v1/stock-movements
  • GET /api/v1/stock-transfers
  • POST /api/v1/stock-transfers
  • GET /api/v1/stock-transfers/{transfer_id}
  • GET /api/v1/warehouses
  • POST /api/v1/warehouses
  • GET /api/v1/warehouses/{warehouse_id}
  • PUT /api/v1/warehouses/{warehouse_id}

Etiquetas, cobranzas, medios de pago y reportes

  • GET /api/v1/tags
  • POST /api/v1/tags
  • PATCH /api/v1/tags/{tag_id}
  • POST /api/v1/customers/tags/apply
  • POST /api/v1/suppliers/tags/apply
  • POST /api/v1/products/tags/apply
  • POST /api/v1/sales/tags/apply
  • GET /api/v1/customer-payments
  • POST /api/v1/customer-payments
  • GET /api/v1/customer-payments/{payment_id}
  • POST /api/v1/customer-payments/{payment_id}/void
  • GET /api/v1/supplier-payments
  • POST /api/v1/supplier-payments
  • GET /api/v1/supplier-payments/{payment_id}
  • POST /api/v1/supplier-payments/{payment_id}/void
  • GET /api/v1/payment-methods
  • POST /api/v1/payment-methods
  • GET /api/v1/payment-methods/{payment_method_id}
  • PUT /api/v1/payment-methods/{payment_method_id}
  • GET /api/v1/points-of-sale
  • POST /api/v1/reports/query - ver Reportes

Ejemplo de creación de compra

curl -X POST "https://api.lapyme.com.ar/api/v1/purchases" \
  -H "Authorization: Bearer YOUR_BEARER_HERE" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 2bb0c70a-8787-4186-9678-c8156206db16" \
  -d '{
    "supplier_id": "afafcbec-9d94-4174-8d5c-ec8d72780947",
    "voucher_type": 1,
    "supplier_invoice_number": "0001-00000001",
    "invoice_date": "2026-03-10",
    "currency": "PES",
    "exchange_rate": 1,
    "products_received": false,
    "items": [
      {
        "product_id": "9c692e8b-0f9a-4f7c-8b99-061a2eb188ae",
        "quantity": 1,
        "unit_cost": 8250
      }
    ]
  }'

Ejemplo de aumento masivo de costos

curl -X POST "https://api.lapyme.com.ar/api/v1/products/bulk-adjustments" \
  -H "Authorization: Bearer YOUR_BEARER_HERE" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: supplier-cost-increase-2026-04-30-001" \
  -d '{
    "target": "cost",
    "operation_type": "increase",
    "adjustment_type": "percentage",
    "adjustment_value": 5,
    "default_supplier_id": "550e8400-e29b-41d4-a716-446655440201",
    "selection": {
      "type": "all",
      "excluded_ids": []
    }
  }'

Scopes requeridos

  • customers:read
  • customers:write
  • categories:read
  • categories:write
  • suppliers:read
  • suppliers:write
  • products:read
  • products:write
  • warehouses:read
  • warehouses:write
  • purchases:read
  • purchases:write
  • sales:read
  • sales:write
  • transfers:read
  • transfers:write
  • price_lists:read
  • price_lists:write
  • payment_methods:read
  • payment_methods:write
  • reports:read
Cada endpoint está documentado en detalle en la referencia OpenAPI de esta sección.