API Reference v2.5.0

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.

Ir a generar mi API Key

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.

GET (listar)
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();
POST (crear)
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ódigoSignificado
200OK
400Petición inválida (faltan datos)
401API Key inválida o ausente
404Recurso no encontrado
500Error 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.

GET//wardian.com.co/dist/api/references/tables.php?table={catalogo}

Catálogos globales (datos de referencia, públicos). Usa table=all para traerlos todos.

Campo que lo usatable=Descripción
unit_measure_idunidadesUnidades de medida DIAN
standard_code_idcodigos_estandarCódigos estándar de adopción
tribute_idtributosTributos (IVA, INC, etc.)
identification_document_iddocumentos_identidadTipos de documento (CC, NIT…)
municipalities_codemunicipiosMunicipios (DANE)
country_codepaisesPaíses
responsabilidades_iva, regimen_iva, autorretenciones, bancosOtros catálogos disponibles
GET (público, sin API Key)
const res = await fetch("//wardian.com.co/dist/api/references/tables.php?table=unidades");
const data = await res.json();
Response
{
  "success": true,
  "data": [
    { "id": 70, "code": "94", "name": "unidad" }
  ]
}

Catálogos con endpoint propio (requieren X-API-Key)

CampoEndpointNotas
categoria_idapi/settings/categories/list.phpCategorías del usuario
numbering_range_idapi/numbering_ranges/list.phpResoluciones / rangos de numeración
payment_method_codeapi/pos/list_payment_methods.phpMétodos de pago DIAN
tax_rateValor directo: 0, 5, 8, 19
La factura estándar (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

Campos como 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.
GET//wardian.com.co/dist/api/products/data_list.php

Lista los productos del usuario dueño de la API Key. Acepta paginación: ?pagina=1&search=texto.

Response
{
  "success": true,
  "data": [
    { "id": 123, "code_reference": "SKU-001", "name": "Camiseta", "price": "50000.00", "tax_rate": "19.00" }
  ]
}
POST//wardian.com.co/dist/api/products/create.php

Crea un producto. Se envía como multipart/form-data (permite imágenes en files[]).

CampoDescripción
typereqTipo de producto
code_referencereqCódigo / referencia único
namereqNombre del producto
pricereqPrecio de venta
unit_measure_idreqUnidad de medida (id DIAN)
standard_code_idreqCódigo estándar (id)
tax_rate, cost_price, wholesale_priceopcImpuesto, costo, precio mayorista
categoria_id, details, requiere_stock, stockopcCategoría, detalles, control de stock
contenido_presentacion, lote, fecha_vencimiento, cums_codigoopcPresentación, lote, vencimiento, CUMS
files[]opcImágenes del producto
Request (JSON)
{
  "type": "Producto",
  "code_reference": "SKU-001",
  "name": "Camiseta",
  "price": "50000",
  "unit_measure_id": "70",
  "standard_code_id": "1",
  "tax_rate": "19",
  "categoria_id": "5"
}
Response
{
  "status": "success",
  "message": "Producto registrado exitosamente",
  "data": { "producto_id": 123, "code_reference": "SKU-001", "name": "Camiseta" }
}
Para adjuntar imágenes usa multipart/form-data (campo files[]) en vez de JSON.
POST//wardian.com.co/dist/api/products/edit.php

Edita un producto existente. Mismos campos que crear, más:

CampoDescripción
idreqID del producto a editar
Request (JSON)
{ "id": "123", "name": "Camiseta Premium", "price": "60000" }
Response
{ "status": "success", "message": "Producto actualizado exitosamente" }

Terceros

GET//wardian.com.co/dist/api/third/data_list.php

Lista los terceros (clientes/proveedores) del usuario. Acepta ?pagina=1&search=texto.

Response
{
  "success": true,
  "data": [
    { "id": 45, "identification": "901234567", "company_name": "ACME SAS", "email": "info@acme.co" }
  ]
}
POST//wardian.com.co/dist/api/third/create.php

Crea un tercero.

CampoDescripción
typeSelectorreqTipo (Persona / Empresa)
identification_document_idreqTipo de documento (id DIAN)
identificationreqNúmero de identificación
address, email, phonereqDirección, correo, teléfono
tribute_idreqResponsabilidad tributaria (id)
dv, company_name, name, last_name, trade_nameopcDV, razón social, nombres, nombre comercial
ciiu, country_code, municipalities_codeopcCIIU, país, municipio (DANE)
Request (JSON)
{
  "typeSelector": "Empresa",
  "identification_document_id": "31",
  "identification": "901234567",
  "email": "info@acme.co",
  "phone": "3001234567",
  "address": "Calle 1 # 2-3",
  "tribute_id": "21"
}
Response
{
  "status": "success",
  "message": "Tercero creado exitosamente",
  "data": { "tercero_id": 45, "name": "ACME SAS", "identification": "901234567", "email": "info@acme.co", "phone": "3001234567" }
}
POST//wardian.com.co/dist/api/third/edit.php

Edita un tercero. Mismos campos que crear, más:

CampoDescripción
tercero_idreqID del tercero a editar
Request (JSON)
{ "tercero_id": "45", "email": "nuevo@acme.co", "phone": "3009999999" }
Response
{ "status": "success", "message": "Tercero actualizado exitosamente" }

Categorías

GET//wardian.com.co/dist/api/settings/categories/list.php

Lista las categorías de productos del usuario.

Response
{
  "success": true,
  "data": [
    { "id": 5, "nombre": "Ropa", "descripcion": "Prendas de vestir", "color": "#CFFF00", "activo": 1 }
  ]
}
POST//wardian.com.co/dist/api/settings/categories/create.php

Crea una categoría de productos.

CampoDescripción
nombrereqNombre de la categoría
descripcion, color, icono, activoopcDescripción, color, ícono, estado
configuracion_puc_activa, cuenta_ingreso_venta, cuenta_costo_venta, cuenta_inventario, cuenta_compraopcCuentas contables PUC (si se activa la config)
Request (JSON)
{ "nombre": "Ropa", "descripcion": "Prendas de vestir", "color": "#CFFF00", "activo": "1" }
Response
{
  "status": "success",
  "message": "Categoría creada exitosamente",
  "data": { "categoria_id": 5, "nombre": "Ropa", "descripcion": "Prendas de vestir", "color": "#CFFF00" }
}
POST//wardian.com.co/dist/api/settings/categories/edit.php

Edita una categoría. Mismos campos que crear, más:

CampoDescripción
categoria_idreqID de la categoría a editar
Request (JSON)
{ "categoria_id": "5", "nombre": "Ropa y Calzado" }
Response
{ "status": "success", "message": "Categoría actualizada exitosamente" }

Crear factura estándar

Antes de facturar: crea/ten el tercero (obtienes su 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.
Requisito de la cuenta: tu cuenta (la dueña de la API Key) debe estar habilitada en la DIAN — con credenciales DIAN configuradas y un rango de numeración autorizado. Sin eso, la DIAN responde error. El entorno (pruebas/producción) lo determina la configuración DIAN de tu cuenta.
POST//wardian.com.co/dist/api/invoice/generate.php

Genera una factura electrónica de venta estándar (multipart/form-data). Responde JSON con el resultado DIAN.

Cabecera

CampoDescripción
customerreqID del tercero (de api/third)
numbering_range_idreqRango de numeración / resolución
payment_formreq1 Contado · 2 Crédito
payment_method_codereqMétodo de pago (catálogo)
observationopcNota / observación
payment_due_dateopcFecha de vencimiento (si crédito)
companyopcNombre del emisor (para el correo/PDF)
reference_code, cuenta_bancaria_id, cost_center_idopcReferencia, cuenta bancaria, centro de costo
currency_code, currency_value, currency_dateopcMoneda (por defecto COP)

Ítems — products[]

CampoDescripción
idreqID del producto (de api/products)
code_reference, namereqCódigo y nombre del ítem
quantity, pricereqCantidad y precio unitario
tax_ratereq% IVA: 0, 5, 8, 19
unit_measure_id, standard_code_id, tribute_idreqCatálogos (ver Relaciones)
discount_rate, is_excludedopc% descuento, excluido de IVA (0/1)
ret_fuente_rate, ret_iva_rate, ret_ica_rateopcRetenciones (si el cliente retiene)

Ejemplo

Request (JSON)
{
  "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"
    }
  ]
}
Response
{
  "status": "success",
  "message": "Factura creada exitosamente",
  "data": {
    "invoice_id": 47014,
    "bill_number": "SETP990000227",
    "cufe": "7b4a382a9a751cc88156a47f2eac24c7987353d1...",
    "code_reference": "INV6a46c29683f15fdc6"
  }
}
Importante: envía 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".