Documentación de la API de Wardian
Integra facturación electrónica, inventarios y más. Todas las peticiones se autentican con una API Key.
- Base URL:
//wardian.com.co/dist/api/ - Formato: JSON
- Autenticación: header
X-API-Key
Autenticación
Envía tu API Key en el header X-API-Key en cada petición. Si falta o es inválida, la API responde 401 Unauthorized.
X-API-Key: wrd_tu_api_key_aqui
1 Generar tu API Key
En tu panel, ve a Software → Documentación → API Keys y presiona Generar API Key. Cópiala y guárdala; solo se muestra completa al crearla.
2 Primer request
Toda petición lleva el header X-API-Key. Para POST, envía el cuerpo en JSON con Content-Type: application/json. Las respuestas son JSON.
const res = await fetch("//wardian.com.co/dist/api/products/data_list.php", {
headers: { "X-API-Key": "wrd_tu_api_key_aqui" }
});
const data = await res.json();
const res = await fetch("//wardian.com.co/dist/api/third/create.php", {
method: "POST",
headers: {
"X-API-Key": "wrd_tu_api_key_aqui",
"Content-Type": "application/json"
},
body: JSON.stringify({ /* campos del endpoint */ })
});
const data = await res.json();
Códigos de error
| Código | Significado |
|---|---|
200 | OK |
400 | Petición inválida (faltan datos) |
401 | API Key inválida o ausente |
404 | Recurso no encontrado |
500 | Error interno |
Relaciones (catálogos)
Varios campos de productos, terceros y de la factura estándar no son valores libres: referencian catálogos (IDs de la DIAN / DANE). Obtén los valores válidos antes de crear.
Catálogos globales (datos de referencia, públicos). Usa table=all para traerlos todos.
| Campo que lo usa | table= | Descripción |
|---|---|---|
unit_measure_id | unidades | Unidades de medida DIAN |
standard_code_id | codigos_estandar | Códigos estándar de adopción |
tribute_id | tributos | Tributos (IVA, INC, etc.) |
identification_document_id | documentos_identidad | Tipos de documento (CC, NIT…) |
municipalities_code | municipios | Municipios (DANE) |
country_code | paises | Países |
| — | responsabilidades_iva, regimen_iva, autorretenciones, bancos | Otros catálogos disponibles |
const res = await fetch("//wardian.com.co/dist/api/references/tables.php?table=unidades");
const data = await res.json();
{
"success": true,
"data": [
{ "id": 70, "code": "94", "name": "unidad" }
]
}
Catálogos con endpoint propio (requieren X-API-Key)
| Campo | Endpoint | Notas |
|---|---|---|
categoria_id | api/settings/categories/list.php | Categorías del usuario |
numbering_range_id | api/numbering_ranges/list.php | Resoluciones / rangos de numeración |
payment_method_code | api/pos/list_payment_methods.php | Métodos de pago DIAN |
tax_rate | — | Valor directo: 0, 5, 8, 19 |
api/invoice/generate.php) usa estas mismas relaciones en su customer (identification_document_id, tribute_id, municipalities_code) y en cada ítem (unit_measure_id, standard_code_id, tax_rate), más numbering_range_id y payment_method_code.Productos
unit_measure_id, standard_code_id, tax_rate, categoria_id y tribute_id referencian catálogos. Consulta Relaciones / Catálogos para obtener los valores válidos. Son las mismas relaciones que usa la factura estándar.Lista los productos del usuario dueño de la API Key. Acepta paginación: ?pagina=1&search=texto.
{
"success": true,
"data": [
{ "id": 123, "code_reference": "SKU-001", "name": "Camiseta", "price": "50000.00", "tax_rate": "19.00" }
]
}
Crea un producto. Se envía como multipart/form-data (permite imágenes en files[]).
| Campo | Descripción | |
|---|---|---|
type | req | Tipo de producto |
code_reference | req | Código / referencia único |
name | req | Nombre del producto |
price | req | Precio de venta |
unit_measure_id | req | Unidad de medida (id DIAN) |
standard_code_id | req | Código estándar (id) |
tax_rate, cost_price, wholesale_price | opc | Impuesto, costo, precio mayorista |
categoria_id, details, requiere_stock, stock | opc | Categoría, detalles, control de stock |
contenido_presentacion, lote, fecha_vencimiento, cums_codigo | opc | Presentación, lote, vencimiento, CUMS |
files[] | opc | Imágenes del producto |
{
"type": "Producto",
"code_reference": "SKU-001",
"name": "Camiseta",
"price": "50000",
"unit_measure_id": "70",
"standard_code_id": "1",
"tax_rate": "19",
"categoria_id": "5"
}
{
"status": "success",
"message": "Producto registrado exitosamente",
"data": { "producto_id": 123, "code_reference": "SKU-001", "name": "Camiseta" }
}
multipart/form-data (campo files[]) en vez de JSON.Edita un producto existente. Mismos campos que crear, más:
| Campo | Descripción | |
|---|---|---|
id | req | ID del producto a editar |
{ "id": "123", "name": "Camiseta Premium", "price": "60000" }
{ "status": "success", "message": "Producto actualizado exitosamente" }
Terceros
Lista los terceros (clientes/proveedores) del usuario. Acepta ?pagina=1&search=texto.
{
"success": true,
"data": [
{ "id": 45, "identification": "901234567", "company_name": "ACME SAS", "email": "info@acme.co" }
]
}
Crea un tercero.
| Campo | Descripción | |
|---|---|---|
typeSelector | req | Tipo (Persona / Empresa) |
identification_document_id | req | Tipo de documento (id DIAN) |
identification | req | Número de identificación |
address, email, phone | req | Dirección, correo, teléfono |
tribute_id | req | Responsabilidad tributaria (id) |
dv, company_name, name, last_name, trade_name | opc | DV, razón social, nombres, nombre comercial |
ciiu, country_code, municipalities_code | opc | CIIU, país, municipio (DANE) |
{
"typeSelector": "Empresa",
"identification_document_id": "31",
"identification": "901234567",
"email": "info@acme.co",
"phone": "3001234567",
"address": "Calle 1 # 2-3",
"tribute_id": "21"
}
{
"status": "success",
"message": "Tercero creado exitosamente",
"data": { "tercero_id": 45, "name": "ACME SAS", "identification": "901234567", "email": "info@acme.co", "phone": "3001234567" }
}
Edita un tercero. Mismos campos que crear, más:
| Campo | Descripción | |
|---|---|---|
tercero_id | req | ID del tercero a editar |
{ "tercero_id": "45", "email": "nuevo@acme.co", "phone": "3009999999" }
{ "status": "success", "message": "Tercero actualizado exitosamente" }
Categorías
Lista las categorías de productos del usuario.
{
"success": true,
"data": [
{ "id": 5, "nombre": "Ropa", "descripcion": "Prendas de vestir", "color": "#CFFF00", "activo": 1 }
]
}
Crea una categoría de productos.
| Campo | Descripción | |
|---|---|---|
nombre | req | Nombre de la categoría |
descripcion, color, icono, activo | opc | Descripción, color, ícono, estado |
configuracion_puc_activa, cuenta_ingreso_venta, cuenta_costo_venta, cuenta_inventario, cuenta_compra… | opc | Cuentas contables PUC (si se activa la config) |
{ "nombre": "Ropa", "descripcion": "Prendas de vestir", "color": "#CFFF00", "activo": "1" }
{
"status": "success",
"message": "Categoría creada exitosamente",
"data": { "categoria_id": 5, "nombre": "Ropa", "descripcion": "Prendas de vestir", "color": "#CFFF00" }
}
Edita una categoría. Mismos campos que crear, más:
| Campo | Descripción | |
|---|---|---|
categoria_id | req | ID de la categoría a editar |
{ "categoria_id": "5", "nombre": "Ropa y Calzado" }
{ "status": "success", "message": "Categoría actualizada exitosamente" }
Crear factura estándar
id) y los productos, y ten a mano el numbering_range_id (ver Catálogos). La factura se envía a la DIAN y responde con el número y el CUFE.Genera una factura electrónica de venta estándar (multipart/form-data). Responde JSON con el resultado DIAN.
Cabecera
| Campo | Descripción | |
|---|---|---|
customer | req | ID del tercero (de api/third) |
numbering_range_id | req | Rango de numeración / resolución |
payment_form | req | 1 Contado · 2 Crédito |
payment_method_code | req | Método de pago (catálogo) |
observation | opc | Nota / observación |
payment_due_date | opc | Fecha de vencimiento (si crédito) |
company | opc | Nombre del emisor (para el correo/PDF) |
reference_code, cuenta_bancaria_id, cost_center_id | opc | Referencia, cuenta bancaria, centro de costo |
currency_code, currency_value, currency_date | opc | Moneda (por defecto COP) |
Ítems — products[]
| Campo | Descripción | |
|---|---|---|
id | req | ID del producto (de api/products) |
code_reference, name | req | Código y nombre del ítem |
quantity, price | req | Cantidad y precio unitario |
tax_rate | req | % IVA: 0, 5, 8, 19 |
unit_measure_id, standard_code_id, tribute_id | req | Catálogos (ver Relaciones) |
discount_rate, is_excluded | opc | % descuento, excluido de IVA (0/1) |
ret_fuente_rate, ret_iva_rate, ret_ica_rate | opc | Retenciones (si el cliente retiene) |
Ejemplo
{
"customer": "45",
"numbering_range_id": "502",
"payment_form": "1",
"payment_due_date": "2026-07-02",
"payment_method_code": "10",
"observation": "Gracias por su compra",
"products": [
{
"id": "123",
"code_reference": "SKU-001",
"name": "Camiseta",
"quantity": "2",
"price": "50000",
"tax_rate": "19",
"unit_measure_id": "70",
"standard_code_id": "1",
"tribute_id": "1",
"discount_rate": "0",
"is_excluded": "0"
}
]
}
{
"status": "success",
"message": "Factura creada exitosamente",
"data": {
"invoice_id": 47014,
"bill_number": "SETP990000227",
"cufe": "7b4a382a9a751cc88156a47f2eac24c7987353d1...",
"code_reference": "INV6a46c29683f15fdc6"
}
}
payment_due_date (una fecha, aun en contado) y en cada ítem discount_rate e is_excluded con valor (ej. 0). La DIAN rechaza campos vacíos/nulos con "Datos de la factura incompletos".