API v1

Guía pública de integración API

Esta guía muestra el flujo general para integrar cualquier aplicación con Moyata Facturación mediante API REST JSON. La integración puede realizarse desde sistemas ERP, sistemas de ventas, puntos de venta, plataformas web u otras aplicaciones que necesiten emitir facturas en línea en Bolivia.

Acceso requerido: para usar la integración API, la empresa debe contar primero con una cuenta activa en Moyata Facturación y tener configurados sus datos fiscales, sucursales, puntos de venta, productos y ambiente de trabajo. Las credenciales API son generadas por un usuario autorizado desde el panel privado; luego la aplicación integradora puede consumir los endpoints habilitados utilizando un token seguro. Cada token API queda asociado a una empresa, sucursal y punto de venta. Si la empresa necesita emitir desde otro punto de venta, debe generarse o configurarse el token correspondiente.
Base URL: https://factura.moyata.net/api/v1 Autenticación: Bearer Token o X-API-Token Formatos: JSON UTF-8 Ambiente: 1 = Producción, 2 = Prueba

Esta guía presenta el flujo general de integración. La documentación técnica completa, las credenciales de prueba y el acompañamiento inicial se entregan al activar el servicio.

Flujo recomendado

La integración más estable sigue este orden:

  1. Un usuario autorizado de la empresa genera las credenciales API desde el panel privado.
  2. Sincronizar catálogos con /api/v1/catalogos y guardar los IDs/códigos en la aplicación externa.
  3. Validar NIT con /api/v1/validaciones/nit cuando el tipo de documento sea NIT.
  4. Enviar la factura a /api/v1/facturas con los productos ya sincronizados.
  5. Si la empresa necesita cambiar entre prueba y producción, usar /api/v1/configuracion/ambiente.
Regla práctica: primero sincroniza catálogos y valida NIT, luego emite. Eso evita rechazos por códigos inválidos y mejora la estabilidad de la integración.

Autenticación

La API acepta un Bearer Token generado desde el panel de credenciales. También soporta el encabezado X-API-Token para integraciones simples.

Authorization: Bearer <api_token>
Content-Type: application/json
Accept: application/json

Credencial: se genera desde el panel privado por un usuario autorizado de la empresa.

Scopes habituales: facturas:create, catalogos:read, unidades:write, categorias:write y productos:write si la aplicación externa sincroniza catálogos propios.

Sistemas que pueden integrarse

La API puede ser consumida desde sistemas desarrollados en Java, .NET, PHP, Python, Node.js u otras tecnologías que permitan realizar solicitudes HTTP con formato JSON.

También puede integrarse con sistemas ERP, sistemas de ventas, puntos de venta, plataformas administrativas, tiendas en línea o aplicaciones internas que necesiten emitir facturas en línea desde Bolivia.

Credenciales y acceso

Las credenciales API no se crean libremente desde una aplicación externa. Se generan desde la plataforma por un usuario autorizado de la empresa, con la sesión iniciada y los permisos adecuados. El token resultante queda asociado al usuario y a la empresa activa.

Si una empresa necesita integrar su aplicación externa, primero debe activar el servicio y completar la configuración inicial. Recién después el usuario autorizado puede emitir el token y compartirlo de forma segura con el backend de esa aplicación. Si debe operar desde otra sucursal o punto de venta, debe generar o configurar el token correspondiente para ese contexto.

Capacidades principales

GET catalogos:read
https://factura.moyata.net/api/v1/catalogos

Catálogos sincronizados

Devuelve tipos de documento, métodos de pago y productos de la empresa autenticada.

GET catalogos:read
https://factura.moyata.net/api/v1/catalogos/metodos-pago

Métodos de pago

Lista códigos habilitados para el SIN.

GET catalogos:read
https://factura.moyata.net/api/v1/catalogos/tipos-documento

Tipos de documento

Catálogo de tipos de documento de identidad disponibles para facturación.

GET catalogos:read
https://factura.moyata.net/api/v1/catalogos/productos

Productos

Devuelve productos con sincronización fiscal válida.

GET catalogos:read
https://factura.moyata.net/api/v1/catalogos/actividades

Actividades fiscales

Devuelve las actividades económicas sincronizadas desde SIAT.

GET catalogos:read
https://factura.moyata.net/api/v1/catalogos/productos-fisco

Productos fiscales

Devuelve los productos del fisco relacionados con cada actividad.

GET catalogos:read
https://factura.moyata.net/api/v1/catalogos/unidades-fisco

Unidades fiscales

Devuelve las unidades de medida del fisco para relacionarlas con unidades propias.

GET/POST/PUT/DELETE unidades:write
https://factura.moyata.net/api/v1/unidades

Sincronizar unidades

Permite crear, editar y eliminar unidades de medida relacionadas con unidadbo.

GET/POST/PUT/DELETE categorias:write
https://factura.moyata.net/api/v1/categorias

Sincronizar categorías

Permite relacionar categorías con actividad y producto fiscal, y bloquear eliminaciones con productos hijos.

POST/PUT/DELETE productos:write
https://factura.moyata.net/api/v1/productos

Sincronizar productos

Permite crear, editar y eliminar productos. La categoría es opcional; si existe, hereda códigos fiscales.

POST facturas:create
https://factura.moyata.net/api/v1/validaciones/nit

Validación de NIT

Consulta al padrón SIAT para validar NIT, razón social y código de excepción.

POST facturas:create
https://factura.moyata.net/api/v1/configuracion/ambiente

Cambio de ambiente

Actualiza el ambiente operativo del usuario API y regenera el CUFD del punto de venta activo.

POST facturas:create
https://factura.moyata.net/api/v1/facturas

Emitir factura

Registra y emite una factura con el flujo completo de validación, XML, PDF y envío de correo.

Qué se entrega al activar el servicio

Al activar el servicio se entrega acceso al ambiente correspondiente, credenciales API, datos de configuración de la empresa, sucursal y punto de venta, catálogos sincronizados y acompañamiento inicial para realizar las primeras pruebas de emisión.

Ese acceso permite que la aplicación integradora empiece a emitir facturas en línea sin reemplazar su operación comercial principal.

Ejemplo de factura

Payload mínimo para emitir una factura completa. La empresa, la sucursal y el punto de venta se resuelven desde el token, por lo que no se envían como parámetros.

{
  "referencia_externa": "VENTA-000152",
  "emitir": true,
  "codigo_tipo_documento_identidad": 5,
  "codigo_metodo_pago": 1,
  "nombre_cliente": "Cliente Demo",
  "nit_cliente": "99001",
  "email_cliente": "cliente@correo.com",
  "items": [
    {
      "id_producto": 10,
      "cantidad": 1,
      "precio_unitario": 100,
      "descuento": 0,
      "descripcion_adicional": "Servicio"
    }
  ]
}

La referencia_externa debe ser única por cada venta o documento generado en la aplicación integradora.

Respuesta esperada al emitir

La emisión es sincrónica: la API responde cuando la factura fue procesada y quedaron generados el XML, el PDF y el registro fiscal.

{
  "ok": true,
  "message": "Factura emitida correctamente",
  "factura": {
    "numero_factura": 15,
    "cuf": "...",
    "cufd": "...",
    "ruta_xml": "...",
    "ruta_pdf": "...",
    "url_xml": "...",
    "url_pdf": "..."
  }
}

Reglas de negocio importantes

  • codigo_metodo_pago debe salir de /api/v1/catalogos/metodos-pago.
  • id_unidad puede salir de /api/v1/unidades; también puede enviarse id_unidad_bo si esa unidad fiscal ya está relacionada con una unidad local.
  • id_producto debe salir de /api/v1/catalogos/productos o de la respuesta de /api/v1/productos.
  • Las categorías pueden relacionarse con codigo_actividad_fisco y codigo_producto_fisco consultando /api/v1/catalogos/actividades y /api/v1/catalogos/productos-fisco.
  • Al crear o editar productos por API, la categoría es opcional. Si se envía, el producto hereda los códigos fiscales de la categoría; si no se envía, el producto debe incluir códigos fiscales directos.
  • Si el tipo de documento es 5, la API valida el NIT y calcula codigo_excepcion.
  • Si el email del cliente viene vacío, la factura igual se genera; solo se omite el envío por correo.
  • El cambio de ambiente opera sobre el usuario y el punto de venta activos de la empresa.
  • Los importes se envían en bolivianos y con máximo dos decimales; la API recalcula subtotales y totales.
  • Si el producto no está sincronizado, debe crearse o importarse antes de emitir.

Sincronización de productos

Si la aplicación externa administra muchos productos, puede crear, actualizar y eliminar productos usando /api/v1/productos. Para crear un producto debe enviar codigo_producto y descripcion_producto. Si el producto pertenece a una categoría, puede enviar id_categoria o codigo_categoria para heredar los códigos fiscales.

Si el cliente externo trabaja productos sin categoría, puede enviar directamente codigo_actividad_fisco y codigo_producto_fisco. La API valida esos códigos contra las tablas actividad y productobo.

{
  "codigo_producto": "EXT-001",
  "descripcion_producto": "Producto sincronizado",
  "id_categoria": 4,
  "id_unidad": 1,
  "precio_consumidor": 100
}
{
  "codigo_producto": "EXT-002",
  "descripcion_producto": "Producto sin categoria",
  "codigo_actividad_fisco": 620100,
  "codigo_producto_fisco": 99100,
  "id_unidad": 1,
  "precio_consumidor": 100
}

La eliminación solo se ejecuta si el producto no tiene movimientos en facturas. Si ya fue usado, la API responde con error 409.

Sincronización de unidades

La aplicación externa puede consultar /api/v1/catalogos/unidades-fisco para obtener las unidades de medida del fisco. Luego puede crear unidades propias en /api/v1/unidades relacionándolas con id_unidad_bo.

{
  "unidad": "Unidad",
  "abrev": "UN",
  "id_unidad_bo": 58
}

DELETE /api/v1/unidades elimina la unidad solo si no tiene productos asociados. En productos puede enviarse id_unidad o id_unidad_bo.

Sincronización de categorías

La aplicación externa puede consultar /api/v1/catalogos/actividades y /api/v1/catalogos/productos-fisco?codigo_actividad_fisco=620100 para mostrar al usuario las opciones del fisco.

Luego puede crear o editar categorías en /api/v1/categorias. Cuando cambia la actividad o producto fiscal de una categoría, la API hereda esos valores a los productos que tengan esa categoría asignada. Los productos sin categoría no se modifican.

{
  "codigo_categoria": "SERV",
  "descripcion_categoria": "Servicios",
  "codigo_actividad_fisco": 620100,
  "codigo_producto_fisco": 99100
}

DELETE /api/v1/categorias elimina la categoría solo si no tiene productos hijos. Si existen productos relacionados, responde 409.

Códigos HTTP y errores

La API usa estos códigos como referencia general:

Código Significado
200Consulta correcta
201Factura creada
400Datos incompletos o inválidos
401Token inválido o ausente
403Sin permiso para ese endpoint
404Recurso no encontrado
409Conflicto, duplicado o factura ya procesada
422Error de validación
500Error interno

Formato de error recomendado:

{
  "ok": false,
  "message": "codigo_metodo_pago invalido",
  "errors": {
    "codigo_metodo_pago": [
      "El metodo de pago no existe o no esta habilitado para esta empresa."
    ]
  }
}

Ejemplo rápido con cURL

Puedes probar la API desde cualquier backend o consola. Solo cambia el token y el payload.

curl -X POST "https://factura.moyata.net/api/v1/facturas" \
  -H "Authorization: Bearer <api_token>" \
  -H "Content-Type: application/json" \
  -d '{...}'

Errores frecuentes

Error Causa habitual Acción recomendada
Token invalido o vencido La credencial expiró o el token no coincide con el registrado. Generar una credencial nueva desde el panel privado.
codigo_metodo_pago invalido Se envió un clasificador que no existe o no está habilitado. Consultar /api/v1/catalogos/metodos-pago.
Producto no encontrado El ID de producto no pertenece a la empresa autenticada. Sincronizar catálogos y usar IDs devueltos por la API.
No existe codigo de sistema configurado Falta asociar el token y el ambiente correcto a la empresa. Revisar /api/v1/configuracion/ambiente y el panel de tokens.

Integración sugerida desde otro sistema

El orden recomendable para una aplicación integradora es este:

  1. Solicitar la habilitación API para la empresa que se va a integrar.
  2. Guardar el token en el backend de la aplicación integradora y usarlo en cada llamada.
  3. Leer catálogos al iniciar sesión o al abrir la pantalla de facturación.
  4. Validar NIT antes de emitir cuando corresponda.
  5. Crear la factura y persistir el numero_factura, cuf, url_pdf y url_xml.
  6. Si tu sistema puede reenviar solicitudes por cortes de red, usa una referencia externa única para evitar duplicados.