---
title: "Crear cuenta (self-serve, plan free)"
method: POST
path: "/tenants/register"
tags: ["cuenta"]
---

# Crear cuenta (self-serve, plan free)

`POST /tenants/register`

## Request

- Base URL: `https://contadeo.com/api`
- URL: `https://contadeo.com/api/tenants/register`
- Auth: none required

Rate-limit: 5 altas por IP cada 10 min (429). Exige `aceptaPrivacidad: true` (LOPDP) y `declaraTitularidadRuc: true` (declaración de titularidad del RUC). Si el operador definió `REGISTRATION_TOKEN`, el alta exige `registrationToken` igual (403).

## Request body

- object
  - `nombre` string: Nombre de respaldo de la cuenta, solo para cuando el catastro del SRI no responde. La razón social del RUC siempre manda sobre él.
  - `nombreUsuario` string: Nombre y apellidos de quien crea la cuenta (users.nombre).
  - `email` string, email, required
  - `password` string, required
  - `aceptaPrivacidad` boolean, required: Aceptación del Aviso de Privacidad (LOPDP); se registra la fecha
  - `aceptaTerminos` boolean, required: Aceptación de los Términos y Condiciones; se registra la fecha
  - `registrationToken` string
  - `ruc` string, required: Obligatorio (400 si falta o su dígito verificador no valida). De él salen el nombre de la cuenta (razón social), el régimen y la dirección, precargados del catastro público del SRI (best-effort: su fallo nunca rompe el registro). El identificador interno (slug) lo genera el sistema.
  - `declaraTitularidadRuc` boolean, required: Declaración expresa de titularidad del RUC: quien registra declara ser su titular, su representante legal o administrador, o contar con autorización para emitir a su nombre. Obligatoria (400 sin ella); se guardan fecha, usuario, IP y versión del texto como evidencia.
  - `codigoPartner` string: Código de referido de un partner (opcional, best-effort).
  - `modulosVisibles` string[], nullable: Módulos que la empresa eligió ver en el menú del panel. Es visibilidad, no permiso: lo que el plan o el complemento Gestión no incluyen no se muestra aunque esté en la lista. null = todo a la vista (las empresas anteriores a esta opción). Factura y nota de crédito se ven siempre. Un módulo desconocido da 400.

## Response `201`

Cuenta creada; par de tokens del owner

- Tokens
  - `accessToken` string
  - `refreshToken` string

## Other responses

- `400`: Cuerpo inválido o validación de negocio (previene errores SRI 62/52/65/69/39)
- `403`: Rol insuficiente o acceso denegado
- `429`: Rate-limit de registro

---

[API](https://skmtc.dev/contadeo/apis/api-de-contadeo.md) · [All operations](https://skmtc.dev/contadeo/apis/api-de-contadeo/llms.txt) · [OpenAPI document](https://skmtc.dev/contadeo/apis/api-de-contadeo/revisions/461bbb9a74ce?raw)
