Documentacion API de Tikel

Documentacion de endpoints para integracion del sistema. Incluye headers requeridos, ejemplos y campos de body para metodos POST.

📖Introduccion#

Esta documentacion centraliza los endpoints disponibles para catalogos, clientes, productos y facturacion.

URL Base: https://{empresa}-sandbox.tikel.app/api/v1
Ejemplo: https://tikel-sandbox.tikel.app/api/v1
Formato: Todas las peticiones y respuestas usan JSON
Importante: El prefijo de la URL cambia segun la empresa (por ejemplo, tikel), pero el sufijo -sandbox.tikel.app es fijo.

🔐Headers Requeridos#

Cada endpoint debe enviarse con estos headers:

ParámetroTipoRequeridoOpcionesDepende deDescripción
Acceptheader✅ Requerido--Debe enviarse como application/json
Content-Typeheader✅ Requerido--Debe enviarse como application/json
Authorizationheader✅ Requerido--Bearer your-token
Headers
Accept: application/json
Content-Type: application/json
Authorization: Bearer your-token
Importante: El token debe enviarse como Bearer token valido.

🌐Endpoints Generales#

AUTENTIFICACION PRIMERO: Consume primero POST /token y guarda el token. Ese token debe enviarse en Authorization: Bearer ...para el resto de endpoints protegidos.
POSThttps://tikel-sandbox.tikel.app/api/v1/token

AUTENTIFICACION: Genera token para consumir los demas endpoints

Request POST /token
{
  "email": "usuario@empresa.com",
  "password": "tu-password"
}

POST /token - Body

ParámetroTipoRequeridoOpcionesDepende deDescripción
emailstring✅ Requerido--Correo del usuario
passwordstring✅ Requerido--Contrasena del usuario
Clave: Guarda el token recibido y reutilizalo en los headers Authorization para no perder la sesion.
GEThttps://tikel-sandbox.tikel.app/api/v1/users

Obtiene el listado de usuarios

Request GET /users
curl -X GET "https://tikel-sandbox.tikel.app/api/v1/users" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-token"
GEThttps://tikel-sandbox.tikel.app/api/v1/countries

Obtiene catalogo de paises

Request GET /countries
curl -X GET "https://tikel-sandbox.tikel.app/api/v1/countries" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-token"
GEThttps://tikel-sandbox.tikel.app/api/v1/cities

Obtiene catalogo de ciudades

Request GET /cities
curl -X GET "https://tikel-sandbox.tikel.app/api/v1/cities" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-token"
GEThttps://tikel-sandbox.tikel.app/api/v1/departments

Obtiene catalogo de departamentos

Request GET /departments
curl -X GET "https://tikel-sandbox.tikel.app/api/v1/departments" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-token"
GEThttps://tikel-sandbox.tikel.app/api/v1/activities

Obtiene catalogo de actividades economicas

Request GET /activities
curl -X GET "https://tikel-sandbox.tikel.app/api/v1/activities" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-token"
GEThttps://tikel-sandbox.tikel.app/api/v1/incoterms

Obtiene catalogo de incoterms

Request GET /incoterms
curl -X GET "https://tikel-sandbox.tikel.app/api/v1/incoterms" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-token"
POSThttps://tikel-sandbox.tikel.app/api/v1/webhook

WEBHOOK: Endpoint que debe escuchar el cliente para eventos de facturacion de /billing-invoice

Request POST /webhook
curl -X POST "https://tikel-sandbox.tikel.app/api/v1/webhook" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
Webhook del cliente: Este endpoint debe quedar escuchando en tu cliente para recibir eventos cuando se ejecuta POST /billing-invoice.
Nota: Este endpoint no lleva body.

👥Endpoints Customers#

GEThttps://tikel-sandbox.tikel.app/api/v1/clients

Lista clientes

Request GET /clients
curl -X GET "https://tikel-sandbox.tikel.app/api/v1/clients" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-token"
GEThttps://tikel-sandbox.tikel.app/api/v1/clients/{id}

Obtiene detalle de un cliente

ParámetroTipoRequeridoOpcionesDepende deDescripción
idinteger✅ Requerido--ID del recurso (parametro de ruta)
POSThttps://tikel-sandbox.tikel.app/api/v1/clients

Crea un cliente

ParámetroTipoRequeridoOpcionesDepende deDescripción
nombrestring✅ Requerido--Nombre completo o razon social del cliente
correostring✅ Requerido--Correo electronico del cliente
telefonostring❌ Opcional--Telefono de contacto (opcional)
fecha_nacimientostring❌ Opcional--Fecha de nacimiento en formato YYYY-MM-DD (opcional)
direccionobject❌ Opcional--Objeto { country_id, department_id, city_id, complemento }
direccion.city_idnumber⚠️ Condicional-Si se envia direccion como objetoID de ciudad (opcional, si no se envia en direccion objeto)
direccion.department_idnumber⚠️ Condicional-Si se envia direccion como objetoID de departamento (opcional, si no se envia en direccion objeto)
direccion.country_idnumber⚠️ Condicional-Si se envia direccion como objetoID de pais (opcional, si no se envia en direccion objeto)
direccion.complementostring⚠️ Condicional-Si se envia direccion como objetoComplemento de la direccion (opcional, si no se envia en direccion objeto)
duistring⚠️ Condicional-payment_method = 2 o 3Longitud exacta: 10 (con guion). Debe ser unico si se envia
nitstring⚠️ Condicional-payment_method = 2 o 3Longitud exacta: 14 (sin guion). Debe ser unico si se envia
nrcstring⚠️ Condicional-payment_method = 2Longitud exacta: 7 (sin guion). Debe ser unico si se envia
payment_methodinteger✅ Requerido
2: CCF
3: Sujeto Excluido
4: Exportacion
-Metodo de pago
actividad_economica_idnumber⚠️ Condicional-payment_method = 2 o 3ID de actividad economica
actividadstring⚠️ Condicional-payment_method = 4Nombre de la actividad economica
customer_kindinteger⚠️ Condicional
1: Grande
2: Mediana
3: Pequeña
payment_method = 2Tamaño de la empresa
documentostring⚠️ Condicional-payment_method = 4Documento principal del cliente
tipo_personainteger⚠️ Condicional
1: Natural
2: Juridica
payment_method = 4Tipo de persona
id_codincotermsnumber⚠️ Condicional-payment_method = 4ID del incoterm
PUThttps://tikel-sandbox.tikel.app/api/v1/clients/{id}

Actualiza un cliente (id obligatorio en path)

ParámetroTipoRequeridoOpcionesDepende deDescripción
idinteger✅ Requerido--ID del cliente a actualizar (parametro de ruta)
nombrestring⚠️ Condicional-Requerido si no existe valor previo en el clienteSi no se envia, toma el valor actual del cliente
correostring⚠️ Condicional-Requerido si no existe valor previo en el clienteSi no se envia, toma el valor actual del cliente
telefonostring❌ Opcional--Telefono de contacto (opcional)
fecha_nacimientostring❌ Opcional--Fecha de nacimiento en formato YYYY-MM-DD (opcional)
direccionobject❌ Opcional--Objeto { country_id, department_id, city_id, complemento }
direccion.city_idnumber⚠️ Condicional-Si se envia direccion como objetoID de ciudad (opcional, si no se envia en direccion objeto)
direccion.department_idnumber⚠️ Condicional-Si se envia direccion como objetoID de departamento (opcional, si no se envia en direccion objeto)
direccion.country_idnumber⚠️ Condicional-Si se envia direccion como objetoID de pais (opcional, si no se envia en direccion objeto)
direccion.complementostring⚠️ Condicional-Si se envia direccion como objetoComplemento de la direccion (opcional, si no se envia en direccion objeto)
duistring⚠️ Condicional-payment_method = 2 o 3Longitud exacta: 10 (con guion). Debe ser unico si se envia. Unicidad validada excluyendo el mismo id del cliente
nitstring⚠️ Condicional-payment_method = 2 o 3Longitud exacta: 14 (sin guion). Debe ser unico si se envia. Unicidad validada excluyendo el mismo id del cliente
nrcstring⚠️ Condicional-payment_method = 2Longitud exacta: 7 (sin guion). Debe ser unico si se envia. Unicidad validada excluyendo el mismo id del cliente
payment_methodinteger⚠️ Condicional
2: CCF
3: Sujeto Excluido
4: Exportacion
Requerido si no existe valor previo en el clienteSi no se envia, toma el valor actual del cliente
actividad_economica_idnumber⚠️ Condicional-payment_method = 2 o 3ID de actividad economica
actividadstring⚠️ Condicional-payment_method = 4Nombre de la actividad economica
customer_kindinteger⚠️ Condicional
1: Grande
2: Mediana
3: Pequeña
payment_method = 2Tamaño de la empresa
documentostring⚠️ Condicional-payment_method = 4Documento principal del cliente
tipo_personainteger⚠️ Condicional
1: Natural
2: Juridica
payment_method = 4Tipo de persona
id_codincotermsnumber⚠️ Condicional-payment_method = 4ID del incoterm
DELETEhttps://tikel-sandbox.tikel.app/api/v1/clients/{id}

Elimina un cliente (solo recibe id en path, sin body)

ParámetroTipoRequeridoOpcionesDepende deDescripción
idinteger✅ Requerido--ID del cliente a eliminar (parametro de ruta)

📦Endpoints Products#

GEThttps://tikel-sandbox.tikel.app/api/v1/products

Lista productos

Request GET /products
curl -X GET "https://tikel-sandbox.tikel.app/api/v1/products" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-token"
GEThttps://tikel-sandbox.tikel.app/api/v1/products/{id}

Obtiene detalle de producto

ParámetroTipoRequeridoOpcionesDepende deDescripción
idinteger✅ Requerido--ID del recurso (parametro de ruta)
POSThttps://tikel-sandbox.tikel.app/api/v1/products

Crea un producto

ParámetroTipoRequeridoOpcionesDepende deDescripción
namestring✅ Requerido--Nombre del producto

🧾Endpoints Invoices#

GEThttps://tikel-sandbox.tikel.app/api/v1/detail-invoice/{id}

Obtiene detalle de factura

ParámetroTipoRequeridoOpcionesDepende deDescripción
idinteger✅ Requerido--ID del recurso (parametro de ruta)
POSThttps://tikel-sandbox.tikel.app/api/v1/invoices

Crea una factura

ParámetroTipoRequeridoOpcionesDepende deDescripción
payment_methodinteger✅ Requerido
2: CCF
3: Sujeto Excluido
4: Exportacion
-Metodo de pago
id_clienteinteger✅ Requerido--ID del cliente a facturar
id_userinteger✅ Requerido--ID del usuario que crea la factura
detailsarray✅ Requerido--Listado de lineas de factura (no puede estar vacio)
details[].product_idinteger✅ Requerido--ID del producto en la linea
details[].descripcionstring✅ Requerido--Descripcion del item en la linea
details[].amountinteger✅ Requerido--Cantidad del item
details[].pricedecimal✅ Requerido--Precio unitario del item
rentainteger⚠️ Condicional
1: aplicar retencion
0: no aplicar retencion
Default: 0
payment_method = 2Aplicar retencion de renta 10%
retenciondecimal❌ Opcional--Monto de retencion a descontar
commentstring❌ Opcional--Comentario u observacion de la factura
PUThttps://tikel-sandbox.tikel.app/api/v1/invoices/{id}

Actualiza una factura

ParámetroTipoRequeridoOpcionesDepende deDescripción
idinteger✅ Requerido--ID de la factura a actualizar (parametro de ruta)
detailsarray✅ Requerido--Listado de lineas de factura (no puede estar vacio)
details[].idinteger⚠️ CondicionalPuede ser 0 si se action = 2 para crear nuevo detalleaction = 0 o 1ID del detalle de factura
details[].product_idinteger✅ Requerido--ID del producto en la linea
details[].descripcionstring✅ Requerido--Descripcion del item en la linea
details[].amountinteger✅ Requerido--Cantidad del item
details[].pricedecimal✅ Requerido--Precio unitario del item
details[].actioninteger✅ Requerido
0: actualizar
1: eliminar
2: crear
-Accion a ejecutar para cada detalle
rentainteger❌ Opcional
1: aplicar retencion
0: no aplicar retencion
-Si no se envia, mantiene el valor actual
retenciondecimal❌ Opcional--Si no se envia, mantiene el valor actual
commentstring❌ Opcional--Comentario u observacion de la factura
POSThttps://tikel-sandbox.tikel.app/api/v1/billing-invoice

Dispara proceso de facturacion (webhook)

ParámetroTipoRequeridoOpcionesDepende deDescripción
factura_idinteger✅ Requerido--ID de la factura a facturar
userinteger✅ Requerido--ID del usuario que ejecuta el proceso de facturacion
POSThttps://tikel-sandbox.tikel.app/api/v1/invoices-credit-note

Crea nota de credito

ParámetroTipoRequeridoOpcionesDepende deDescripción
id_facturainteger✅ Requerido--ID de factura original
id_clienteinteger✅ Requerido--ID del cliente asociado a la factura
id_userinteger✅ Requerido--ID del usuario que crea la nota de credito
tipointeger✅ Requerido
2: Devolucion por Valor
3: Devolucion por Producto
-Tipo de nota de credito
descripcionstring❌ Opcional--Descripcion general de la nota de credito
rentainteger❌ Opcional
1: aplicar retencion
0: no aplicar retencion
-Aplicar retencion de renta
detailsarray✅ Requerido--Items de la nota de credito (no puede estar vacio)
details[].product_idinteger✅ Requerido--Producto a acreditar (debe existir en la factura original)
details[].descripcionstring✅ Requerido--Descripcion del item
details[].amountinteger✅ Requerido--Cantidad a acreditar (no puede ser mayor a la de factura original)
details[].pricedecimal✅ Requerido--Precio unitario del item

⚠️Manejo de Errores#

CodigoErrorDescripcion
400Bad RequestParametros invalidos o faltantes
401UnauthorizedToken invalido o faltante
404Not FoundRecurso no encontrado
500Internal Server ErrorError interno del servidor
Ejemplo de respuesta de error
{
    "type": 0,
    "message": "Faltan campos obligatorios(Comprobante de Credito Fiscal): nit (STRING), dui (STRING), nrc (STRING), customer_kind (INTEGER), actividad_economica_id (INTEGER)",
    "data": []
}

Si necesitas ampliar esta documentacion, agrega nuevos endpoints en esta misma estructura.

Ejemplo cURL
curl -X POST "https://tikel-sandbox.tikel.app/api/v1/token" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"email":"usuario@empresa.com","password":"tu-password"}'