Facturación
Referencia de los recursos de Facturación de la API: facturas de compra y remitos. La emisión de comprobantes electrónicos AFIP/ARCA tiene su propia guía completa en /dev/invoices/; esta página cubre los demás documentos de facturación.
Todos los endpoints de esta página están bajo la URL base https://api.yo-facturo.com. Cada recurso expone una API REST estándar (listado, detalle, alta, modificación, baja y operaciones masivas) y se protege con sus propios scopes de lectura y escritura. Para emitir facturas, notas de crédito y notas de débito electrónicas ante AFIP/ARCA, consultá la guía de Facturación AFIP.
Facturas de compra
Una factura de compra es un comprobante emitido por un tercero (proveedor) a nombre del CUIT de la cuenta. La API no permite dar de alta una factura de compra desde cero: los datos fiscales (CUIT, tipo, número, CAE, importes) provienen de ARCA. Los registros entran importando un CSV exportado del portal de ARCA ("Mis Comprobantes Recibidos"). Sobre esos registros, la API sí permite operaciones de gestión: vincularlos a un asiento contable, marcarlos como ignorados o eliminarlos. En resumen, no hay alta ni edición fiscal campo a campo, pero el recurso no es de solo lectura pura: la escritura existe para importar y para gestionar el estado contable de cada comprobante.
Endpoint base: /api/v1/received_invoices
Scopes: received_invoices:read, received_invoices:write
Como las facturas de compra no se crean campo a campo por la API, no hay un cuerpo de creación. Los siguientes campos son los que devuelve un GET de cada registro:
Campos
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
id | string | no | Identificador único del registro. |
tenant_cuit | string | no | CUIT del receptor (la cuenta). |
supplier_cuit | string | no | CUIT del emisor (proveedor). |
supplier_name | string | no | Razón social del proveedor. |
voucher_type | entero | no | Código del tipo de comprobante AFIP (1, 6, 11, ...). |
sale_point | entero | no | Punto de venta del comprobante. |
voucher_number | entero | no | Número del comprobante. |
cae | string | no | CAE del comprobante recibido. |
cae_expiration | string (ISO 8601) | no | Fecha de vencimiento del CAE. |
issue_date | string (ISO 8601) | no | Fecha de emisión del comprobante. |
processed_date | string (ISO 8601) | no | Fecha en que AFIP registró el comprobante. |
currency | string | no | Moneda del comprobante (por ejemplo "PES"). |
exchange_rate | número | no | Cotización de la moneda. Por defecto 1.0. |
total_amount | número | no | Importe total del comprobante. |
net_taxed | número | no | Importe neto gravado. |
net_untaxed | número | no | Importe neto no gravado. |
exempt | número | no | Importe exento. |
iva | número | no | Importe de IVA. |
other_taxes | número | no | Importe de otros tributos. |
vat_items | array | no | Desglose de alícuotas de IVA (alícuota, base, importe). |
status | string | no | Estado en el pipeline: "pending", "linked" o "ignored". |
source | string | no | Origen del registro: "wsmtxca", "portal_scrape" o "excel_import". |
linked_journal_entry_id | string | no | ID del asiento contable vinculado, si lo hay. |
linked_expense_id | string | no | ID del gasto vinculado, si lo hay. |
linked_account_id | string | no | ID de la cuenta contable vinculada, si la hay. |
notes | string | no | Notas internas sobre el comprobante. |
Endpoints
Relativos a /api/v1/received_invoices. Este recurso no expone los endpoints CRUD genéricos de alta y edición campo a campo: los registros entran por importación de CSV y luego se gestionan. La escritura (received_invoices:write) habilita importar el CSV, vincular el comprobante a la contabilidad, ignorarlo o eliminarlo.
| Método | Endpoint | Descripción | Scope |
|---|---|---|---|
GET | /api/v1/received_invoices/list/ | Listar facturas de compra (con filtros y paginación) | received_invoices:read |
GET | /api/v1/received_invoices/{id}/ | Obtener una factura de compra por su ID | received_invoices:read |
GET | /api/v1/received_invoices/import-history/ | Historial de importaciones de CSV recientes | received_invoices:read |
POST | /api/v1/received_invoices/upload-csv/ | Importar un CSV exportado del portal ARCA (multipart/form-data, campo file) | received_invoices:write |
POST | /api/v1/received_invoices/{id}/link/ | Vincular el comprobante a un asiento contable y cuenta | received_invoices:write |
POST | /api/v1/received_invoices/{id}/ignore/ | Marcar el comprobante como ignorado | received_invoices:write |
DELETE | /api/v1/received_invoices/{id}/ | Eliminar un registro de factura de compra | received_invoices:write |
Ejemplo
Petición — listar las facturas de compra de la cuenta:
curl "https://api.yo-facturo.com/api/v1/received_invoices/list/?page=1&limit=20" \ -H "X-API-Key: TU_TOKEN"
Respuesta — un registro del listado:
{
"success": true,
"data": {
"id": "8c1f0d2e-3a4b-4c5d-9e6f-7a8b9c0d1e2f",
"tenant_cuit": "30716543210",
"supplier_cuit": "20345678901",
"supplier_name": "Insumos del Sur S.R.L.",
"voucher_type": 1,
"sale_point": 4,
"voucher_number": 1203,
"cae": "75123456789012",
"cae_expiration": "2026-05-31T00:00:00",
"issue_date": "2026-05-12T00:00:00",
"processed_date": "2026-05-13T09:15:00",
"currency": "PES",
"exchange_rate": 1.0,
"total_amount": 121000.00,
"net_taxed": 100000.00,
"net_untaxed": 0.00,
"exempt": 0.00,
"iva": 21000.00,
"other_taxes": 0.00,
"vat_items": [
{ "aliquot": 21, "base": 100000.00, "amount": 21000.00 }
],
"status": "pending",
"source": "wsmtxca",
"linked_journal_entry_id": null,
"linked_expense_id": null,
"linked_account_id": null,
"notes": null
}
}Petición — POST /api/v1/received_invoices/{id}/link/ para vincular un comprobante a un asiento contable. journal_entry_id es obligatorio; account_id es opcional:
{
"journal_entry_id": "5f3a1b2c-9d8e-4f7a-b6c5-1d2e3f4a5b6c",
"account_id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
}Respuesta — el comprobante queda en estado "linked":
{
"success": true,
"data": {
"received_invoice_id": "8c1f0d2e-3a4b-4c5d-9e6f-7a8b9c0d1e2f"
}
}Remitos
Un remito es un documento que registra el traslado físico de mercadería al cliente, independiente de la facturación. Descuenta stock al emitirse y luego puede convertirse en una factura. Se administra por completo desde la API: se crean, modifican y dan de baja remitos como cualquier otro recurso.
Endpoint base: /api/v1/delivery_notes
Scopes: delivery_notes:read, delivery_notes:write
Campos
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
customer_id | string | sí | ID del cliente destinatario del remito. |
items | array | sí | Líneas del remito. Debe tener al menos un item (ver tabla de campos del item). |
customer_name | string | no | Nombre del cliente. Máximo 200 caracteres. |
customer_document | string | no | Documento del cliente. Máximo 30 caracteres. |
sale_point | entero | no | Punto de venta. Entre 1 y 99999. |
reference | string | no | Referencia libre (orden de compra, nota interna). Máximo 100 caracteres. |
origin_address | string | no | Domicilio de origen de la mercadería. Máximo 300 caracteres. |
destination_address | string | no | Domicilio de destino de la mercadería. Máximo 300 caracteres. |
carrier_name | string | no | Nombre del transportista. Máximo 200 caracteres. |
carrier_document | string | no | Documento del transportista. Máximo 30 caracteres. |
driver_name | string | no | Nombre del chofer. Máximo 200 caracteres. |
vehicle_plate | string | no | Patente del vehículo. Máximo 20 caracteres. |
status | string | no | Estado del remito: "draft", "issued", "delivered", "invoiced" o "cancelled". |
notes | string | no | Notas internas. Máximo 2000 caracteres. |
metadata | object | no | Objeto libre para datos adicionales. |
Cada elemento del array items es un objeto con los siguientes campos:
Campos del item
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
description | string | sí | Descripción de la línea. Máximo 500 caracteres. |
quantity | número | sí | Cantidad. Debe ser mayor que 0. |
product_id | string | no | ID del producto asociado. |
variant_id | string | no | ID de la variante del producto. |
sku | string | no | SKU del producto. Máximo 100 caracteres. |
unit | string | no | Unidad de medida (por ejemplo "u", "kg"). Máximo 20 caracteres. |
unit_price | número | no | Precio unitario. Mayor o igual a 0. |
subtotal | número | no | Subtotal de la línea. Mayor o igual a 0. |
Endpoints
Relativos a /api/v1/delivery_notes.
| Método | Endpoint | Descripción |
|---|---|---|
GET | /api/v1/delivery_notes/list/ | Listar registros (con filtros y paginación) |
GET | /api/v1/delivery_notes/{id}/ | Obtener un registro por su ID |
POST | /api/v1/delivery_notes/ | Crear un registro |
PUT | /api/v1/delivery_notes/{id}/ | Actualizar un registro |
DELETE | /api/v1/delivery_notes/{id}/ | Eliminar un registro |
POST | /api/v1/delivery_notes/bulk/create/ | Crear varios registros en una sola llamada |
PUT | /api/v1/delivery_notes/bulk/update/ | Actualizar varios registros en una sola llamada |
POST | /api/v1/delivery_notes/bulk/delete/ | Eliminar varios registros en una sola llamada |
Ejemplo
Petición — POST /api/v1/delivery_notes/ para crear un remito:
{
"customer_id": "c0a8f1d2-3e4b-4c5d-8e6f-1a2b3c4d5e6f",
"customer_name": "Comercial Andina S.A.",
"customer_document": "30709876543",
"sale_point": 1,
"reference": "OC-2026-0042",
"origin_address": "Av. Siempre Viva 742, Córdoba",
"destination_address": "Ruta 9 Km 312, Rosario",
"carrier_name": "Transportes del Litoral",
"driver_name": "Juan Pérez",
"vehicle_plate": "AD123FG",
"items": [
{
"description": "Caja de repuestos modelo X-200",
"quantity": 10,
"sku": "REP-X200",
"unit": "u",
"unit_price": 4500.00,
"subtotal": 45000.00
}
],
"status": "issued",
"notes": "Entregar en horario comercial"
}Respuesta — el remito creado, con su number asignado y el stock descontado:
{
"success": true,
"data": {
"id": "7b2e9c1a-4d5f-4a6b-9c8d-2e3f4a5b6c7d",
"number": 58,
"sale_point": 1,
"reference": "OC-2026-0042",
"customer_id": "c0a8f1d2-3e4b-4c5d-8e6f-1a2b3c4d5e6f",
"customer_name": "Comercial Andina S.A.",
"customer_document": "30709876543",
"origin_address": "Av. Siempre Viva 742, Córdoba",
"destination_address": "Ruta 9 Km 312, Rosario",
"carrier_name": "Transportes del Litoral",
"driver_name": "Juan Pérez",
"vehicle_plate": "AD123FG",
"items": [
{
"product_id": null,
"variant_id": null,
"sku": "REP-X200",
"description": "Caja de repuestos modelo X-200",
"quantity": 10,
"unit": "u",
"unit_price": 4500.00,
"subtotal": 45000.00,
"metadata": {}
}
],
"issue_date": "2026-05-21T13:40:00",
"delivery_date": null,
"status": "issued",
"invoice_id": null,
"cae": null,
"stock_deducted": true,
"notes": "Entregar en horario comercial"
}
}Comprobantes AFIP/ARCA
La emisión de facturas, notas de crédito y notas de débito electrónicas ante AFIP/ARCA no se documenta acá: tiene su propia guía detallada en Facturación AFIP (ruta /dev/invoices/), con el flujo de autorización, los tipos de comprobante y la obtención del CAE. Su endpoint base es /api/v1/bill/receipts y usa el scope invoices (invoices:read e invoices:write).