Fac-360

Empieza aquí

De registrarte a emitir en producción, sin hablar con nadie.

Todo el camino es autoservicio. No hay un paso en el que tengas que esperar a que alguien te habilite algo.

  1. Te registras y quedas como OWNER de tu organización.
  2. Das de alta tu empresa en BETA.
  3. Sacas tus llaves de API.
  4. Pides un certificado de prueba —no lo fabricas— y desarrollas contra SUNAT beta.
  5. Cuando estás listo, promueves esa misma empresa a producción.

El paso 5 es el que hace que los cuatro anteriores no se tiren a la basura: conservas tu companyId, tus credenciales, tus webhooks y tu organización.

1. Regístrate

curl -X POST "https://apifact.fac-360.com/console/v1/registrations" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "tu@empresa.pe",
    "password": "…",
    "organizationName": "Mi Empresa"
  }'

Responde 202 diga lo que diga: la misma respuesta y el mismo coste tanto si esa dirección ya tenía cuenta como si no. Es deliberado — ni el cuerpo ni el tiempo que tarda sirven para averiguar quién está registrado.

Quien se registra queda como OWNER de una organización nueva. Es la única forma de llegar a OWNER sin que otro OWNER te promueva. La organización nace sin empresas.

Después: verifica el correo con POST /console/v1/email-verifications, abre sesión con POST /console/v1/sessions, y activa el segundo factor con POST /console/v1/mfa/enrolment.

El segundo factor lo exigen dos actos concretos: promover a producción (paso 6) y acuñar credenciales de organización. Acuñar las llaves de tu empresa —el paso 3— no lo pide. Se activa solo, y hacerlo ahora te evita tropezar con ello el día del salto.

2. Da de alta tu empresa, en BETA

curl -X POST "https://apifact.fac-360.com/console/v1/organizations/{organizationId}/companies" \
  -H "Content-Type: application/json" \
  -d '{ "ruc": "20601030405", "legalName": "MI EMPRESA S.A.C.", "environment": "BETA" }'

Sí: en el edge de producción, con la empresa en BETA. Esa es la ruta recomendada. Emitirá contra SUNAT beta hasta que la promuevas, y el día que lo hagas no cambia nada más.

Dar de alta un RUC no demuestra que lo controles, y la plataforma no finge lo contrario: lo que garantiza es atribución, no prevención. El alta queda registrada con tu nombre en la auditoría de la organización. El control se demuestra más tarde, ante quien puede comprobarlo: SUNAT, aceptando un comprobante firmado con un certificado emitido a ese RUC.

3. Saca tus llaves

curl -X POST "https://apifact.fac-360.com/console/v1/companies/{companyId}/credentials" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "integracion ERP",
    "scopes": ["documents:validate", "documents:create", "documents:submit",
               "documents:read", "operations:read", "artifacts:read"],
    "expiresInDays": 90
  }'

El token se devuelve una sola vez. No hay columna que lo guarde ni ruta que lo relea: la base de datos no tiene de dónde sacarlo otra vez. Guárdalo al recibirlo.

Fíjate en documents:validate: no está implicado por documents:create, y es a propósito. Puedes darle a tu entorno de desarrollo una credencial que ensaya y no puede emitir.

4. Consigue un certificado de beta y desarrolla

No hace falta que lo fabriques con openssl. Pídelo:

curl -X POST "https://apifact.fac-360.com/console/v1/companies/{companyId}/certificates/sandbox" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{ "solUser": "MODDATOS", "solPassword": "moddatos" }'

Genera un autofirmado de 2048 bits con el RUC de tu empresa como sujeto, lo enrola por el mismo camino que una subida, y te devuelve el .pfx y su contraseña una sola vez. Guárdalos: es exactamente el archivo que habrías generado tú, y lo querrás para tus propias pruebas.

El certificado dice en su propio campo OU que no es válido fiscalmente. Dentro de un año, en tu carpeta de descargas, seguirá diciéndolo.

Solo funciona para empresas en BETA. Una que ya emite en producción recibe 409 SANDBOX_CERTIFICATE_REFUSED: allí un certificado que la plataforma se firma a sí misma no demuestra nada sobre quién controla ese RUC, que es justo lo que un certificado de producción está para demostrar.

Las credenciales SOL sí las pones tú. MODDATOS / moddatos es el usuario de pruebas de SUNAT —una convención suya, no un valor que esta API pueda dar por supuesto en tu nombre.

Si prefieres subir el tuyo, la ruta de siempre sigue ahí:

curl -X POST "https://apifact.fac-360.com/console/v1/companies/{companyId}/certificates" \
  -H "Content-Type: application/json" \
  -d '{
    "environment": "BETA",
    "pfxBase64": "…",
    "pfxPassword": "…",
    "solUser": "MODDATOS",
    "solPassword": "…"
  }'

A partir de aquí sigue el Quickstart: ensaya con POST /api/v2/documents/validations, que no crea nada y no consume cuota, y cuando el mapeo esté limpio emite contra beta y recoge el CDR.

5. Prepara producción sin dejar beta

La misma ruta, con "environment": "PRODUCTION" y tu certificado digital real y las credenciales SOL del contribuyente.

Puedes hacerlo mientras sigues desarrollando: la empresa continúa en beta y emitiendo contra beta, y la configuración de producción queda esperando. Actívala con POST /console/v1/companies/{companyId}/certificates/{configurationId}/activation, que la deja armada.

Un certificado de producción no llega a ACTIVE hasta que la plataforma firma con él y SUNAT acepta. Eso ocurre en tu primer comprobante real, después del paso 6.

6. Promueve

curl -X POST "https://apifact.fac-360.com/console/v1/companies/{companyId}/promotion"

Sin cuerpo: no hay nada que decidir. Responde con la fecha y con cuántos ensayos se cerraron.

{
  "companyId": "…",
  "sunatEnvironment": "PRODUCTION",
  "cancelledDocuments": 3,
  "promotedAt": "2026-08-18T14:22:05.881Z"
}

Requiere rol OWNER y segundo factor. Se niega si te falta la configuración de producción armada o si queda algún envío de beta en vuelo.

Es de un solo sentido. No existe la operación inversa. A partir de aquí cada documento aceptado es un comprobante real que entra en el registro de ventas del contribuyente y solo se retira con una comunicación de baja aceptada.

Lo que ensayaste en beta se queda como está, con su CDR y su entorno. Lo que creaste y nunca enviaste queda CANCELLED. Y tu numeración de producción empieza limpia: los correlativos van por entorno.

Los detalles están en Entornos.

Si prefieres una plataforma que da de alta a sus clientes

Todo lo anterior tiene su gemelo en /api/v2/organizations/* con una credencial de organización (companies:manage), para que tu producto dé de alta empresas, les suba certificados, les acuñe credenciales y las promueva sin que nadie entre a una consola.

Esa credencial no puede emitir comprobantes, y no es una convención: ningún scope documents:* es admisible en ella y la base de datos lo rechaza.

On this page