---
title: "Invoice Ninja"
description: "Invoice Ninja"
type: "docs"
category: "doc"
tags: []
authors: [Anonymous]
date: "2026-09-25"
last_update: "2026-09-25"
time_minutes: 1
draft: false
unlisted: false
url: "https://www.billmysales.com/docs/datasources/invoiceninja"
---

# Invoice Ninja



---

## Configuración inicial

Configuración de Invoice Ninja

# Configuración de Invoice Ninja

&gt; [!NOTE] Documentación en progreso.
&gt;
&gt; Si tienes alguna sugerencia o necesitas ayuda, por favor contáctanos a través de nuestro [soporte](https://www.billmysales.com/help).




---

## Instalación con Docker

Instalar Invoice Ninja con Docker

# Instalar Invoice Ninja con Docker

Sigue la [guía de los stacks de Docker](https://www.billmysales.com/docs/stacks) para instalar Invoice Ninja con nuestro [stack](https://github.com/BillMySales/billmysales-docker-invoiceninja) y ten en cuenta lo propio de esta plataforma. El detalle completo está en el README del repositorio.

## Recursos

Este stack necesita unos 2 GB de disco para las imágenes y 1 GB de RAM. En reposo usa alrededor de 910 MiB en total, la mayor parte en MySQL (unos 495 MiB). El primer arranque tarda menos de un minuto.

## Variables obligatorias

| Variable | Qué debe contener |
|---|---|
| `NINJA_URL` | URL pública de la plataforma, por ejemplo `https://billing.example.com`. En ella quedan la aplicación, el portal de clientes (`/client`) y la API. |
| `SITE_ADDRESS` | El dominio de la plataforma, por ejemplo `billing.example.com`. |
| `APP_KEY` | Clave de cifrado de Laravel: `base64:` seguido del resultado de `openssl rand -base64 32`. |
| `DB_PASSWORD` y `DB_ROOT_PASSWORD` | Contraseñas de la base de datos. |
| `NINJA_ADMIN_EMAIL` y `NINJA_ADMIN_PASSWORD` | Correo y contraseña del administrador. Solo se usan al crearlo en el primer arranque: cambiarlos después en el `.env` no modifica la cuenta. |
| `SMTP_HOST` | **Recomendada:** el stack arranca sin ella, pero la plataforma no podrá enviar correos. Servidor SMTP. Completa también `SMTP_PORT`, `SMTP_SECURE`, `SMTP_USER`, `SMTP_PASSWORD`, `SMTP_FROM` y `SMTP_FROM_NAME` según tu proveedor (por defecto, puerto `587` con `SMTP_SECURE=tls`). |

&gt; [!WARNING] Guarda `APP_KEY` fuera del servidor
&gt;
&gt; `APP_KEY` cifra datos como las credenciales de las pasarelas de pago. Está en el `.env`, no en los respaldos, y una base de datos restaurada la necesita.

## Configuración inicial de la empresa

La empresa se crea configurada para Chile (moneda `CLP`, país `CL`, idioma `es_ES`, zona horaria `America/Santiago`, fechas `d/m/Y` y un impuesto IVA de 19% por defecto en las facturas nuevas, sumado al precio de cada línea). Si operas en otro país, cambia `NINJA_COMPANY_NAME`, `NINJA_CURRENCY`, `NINJA_COUNTRY`, `NINJA_LANGUAGE`, `TIMEZONE`, `NINJA_DATE_FORMAT`, `NINJA_TAX_RATE`, `NINJA_TAX_NAME` y `NINJA_PRICES_INCLUDE_TAX` **antes** del primer arranque: estos valores solo se aplican en la instalación inicial y después se modifican desde la aplicación. `TIMEZONE` también se aplica en cada arranque como zona horaria de los contenedores, pero con poco efecto: Laravel trabaja por defecto en UTC.

Se usa `es_ES` porque la traducción `es` de Invoice Ninja tiene textos con errores, entre ellos los asuntos de los correos de facturas y cotizaciones.

## Acceso

Cuando `setup` termina, la aplicación queda disponible en tu dominio con el correo de `NINJA_ADMIN_EMAIL`. El portal de clientes está en `/client` y la API REST en `/api/v1`, con un token creado en la configuración de la aplicación (cabecera `X-API-TOKEN`).

En cada arranque, `setup` guarda en la empresa la dirección del portal de clientes que usan los enlaces de los correos: `NINJA_PORTAL_URL` si la defines, o `NINJA_URL`.

## Actualizaciones

Invoice Ninja se actualiza cambiando `NINJA_VERSION` en el `.env` y ejecutando `docker compose up -d`. Respalda antes. Se descarga la nueva imagen y `setup` copia sus archivos públicos y ejecuta las migraciones antes de que arranque la aplicación. La actualización automática desde la aplicación no aplica, porque el código está en la imagen.

## Restaurar un respaldo

Los respaldos incluyen la base de datos y la carpeta `storage` (logos y documentos). Para restaurar uno:

```shell
docker compose stop app worker scheduler
docker compose run --rm --no-deps backup restore &lt;fecha&gt;
docker compose exec redis redis-cli FLUSHALL
docker compose up -d
```

## Notas

- Las facturas de Invoice Ninja no son documentos tributarios electrónicos válidos ante el SII: para emitirlos se conecta con BillMySales.
- La aplicación solo responde a los dominios de `NINJA_URL` y `NINJA_PORTAL_URL`. Si usas otro dominio más (por ejemplo `www`), agrégalo en `NINJA_EXTRA_HOSTS`.
- Invoice Ninja rechaza webhooks hacia direcciones privadas o locales: la URL que registres debe ser pública.
- Invoice Ninja valida los correos por DNS: una dirección en un dominio sin registros de correo no puede recuperar su contraseña.
- Invoice Ninja se distribuye bajo la Elastic License 2.0: puedes instalarlo en tu servidor, pero no ofrecerlo como servicio alojado. Quitar el texto &quot;Created by Invoice Ninja&quot; de correos y PDF requiere una licencia white label de pago.

## Siguiente paso

Con Invoice Ninja funcionando, configúralo como origen de datos en BillMySales siguiendo la [configuración inicial](https://www.billmysales.com/docs/datasources/invoiceninja/configuracion-inicial).





---
Última actualización el 25/09/2026

