Emisores
Registra tu RUC en modo prueba o producción, guarda sus credenciales, valídalo y habilita producción.
Un emisor es un RUC de tu workspace. Cada RUC pertenece a un modo, igual que las claves, los documentos y los webhooks:
- Un RUC de prueba se crea con una clave
asu_test_, solo lo ven las claves de prueba y emite en SUNAT beta, sin validez tributaria. - Un RUC de producción se crea con una clave
asu_live_, solo lo ven las claves de producción y emite comprobantes reales cuando tiene producción habilitada ("productionEnabled": true). Sin eso, la clave live responde403 PRODUCTION_NOT_ENABLED.
El mismo número de RUC se puede registrar una vez en cada modo. Son dos registros independientes: cada uno tiene sus credenciales, series, establecimientos, validaciones y documentos. Una clave de prueba nunca ve ni usa un RUC de producción, y al revés: para esa clave el RUC responde 404 ISSUER_NOT_FOUND o 403 ISSUER_FORBIDDEN.
El límite de RUC del plan (1 en Gratis y Básico) cuenta solo los RUC de producción. Los RUC de prueba no tienen cupo.
RUC de prueba
- 1
Registra el RUC con tu clave test
bashResponde
201con el emisor ("livemode": false). Queda en el modo de la clave que lo creó. - 2
Sube solo el certificado
bashEl RUC de prueba solo necesita tu certificado digital (
.pfxo.p12en base64) y su clave. No envíes usuario ni clave SOL: SUNAT beta firma con el usuario genéricoMODDATOSy tu certificado. - 3
Valida en beta
bashEmite una boleta de prueba en SUNAT beta y comprueba que tu certificado funciona. Responde
202.statusesaccepted,validating(SUNAT sigue procesando; vuelve a consultar) orejected:jsonDesde ahí tus claves
asu_test_emiten con este RUC. Los comprobantes de prueba numeran desde90000001y no consumen tu plan. Ver Sandbox.
Un RUC de prueba no tiene prueba real ni habilitación: validations/produccion y POST /production responden 409 TEST_MODE_ISSUER. Al revés, validations/beta sobre un RUC de producción responde 409 LIVE_MODE_ISSUER.
RUC de producción
- 1
Registra el RUC con tu clave live
Es la misma petición
POST /issuers, con una claveasu_live_. Responde201con"livemode": true. Si tu plan ya usa todos sus RUC de producción, responde402 ISSUER_LIMIT_REACHED. - 2
Guarda tus credenciales completas
bashTu usuario SOL secundario y su clave, tu certificado digital y, si emites guías, el client id y secret de la API de guías. El certificado debe pertenecer al mismo RUC. En el panel puedes copiar el certificado que ya subiste al RUC de prueba con el mismo número.
El campo
environmentya no se usa. Si lo envías, se ignora. - 3
Haz la prueba real
bashEmite un comprobante realLa prueba real emite una factura de S/ 1.18 con la serie
FPR1y la anula enseguida con una comunicación de baja. Por eso exigeconfirmation: "EMITIR PRUEBA REAL". No consume operaciones de tu plan.Si SUNAT todavía procesa la baja,
statusesvalidating. Vuelve a llamar al mismo endpoint para consultar el resultado. No hace falta validar antes en beta. - 4
Habilita producción
bashSolo funciona cuando la factura y la baja de la prueba real tienen CDR aceptado. Desde ese momento las claves
asu_live_emiten comprobantes reales con este RUC.
Al registrar un RUC se crean automáticamente las series F001 (facturas), B001 (boletas), FC01 y BC01 (notas de crédito), FD01 y BD01 (notas de débito), T001 (guías) y R001 (retenciones).
Habilitar producción
Resumen de requisitos, todos con una clave asu_live_ sobre un RUC de producción:
- Credenciales completas guardadas con
PUT /issuers/{ruc}/credentials. - Prueba real aceptada (
POST /issuers/{ruc}/validations/produccion). POST /issuers/{ruc}/production.
Cambiar las credenciales invalida la prueba real: hay que repetirla.
Recurso Issuer
Las contraseñas y el certificado nunca se devuelven: solo hasSolPassword y hasCertificate. livemode indica el modo del RUC (true producción, false prueba). En un RUC de producción, credentials.produccion es el juego que guardas. En un RUC de prueba solo importa el certificado y credentials.beta.validatedAt es su última validación en beta. productionEnabled indica si las claves asu_live_ pueden emitir con un RUC de producción; en un RUC de prueba siempre es false.
Otras operaciones
| Operación | Endpoint |
|---|---|
| Listar los RUC del modo de la clave | GET /issuers |
| Consultar un RUC | GET /issuers/{ruc} |
| Activar o desactivar un RUC | PATCH /issuers/{ruc} con { "active": false } |
Credenciales de guías (GRE)
Para emitir guías reales, SUNAT exige además las credenciales de la API de guías. Envíalas en el PUT /issuers/{ruc}/credentials del RUC de producción con greClientId y greClientSecret.
Logo del PDF
Envía logoBase64 en PUT /issuers/{ruc}/credentials con un data URI PNG o JPEG (data:image/png;base64,...). Un formato distinto responde INVALID_LOGO.
Elegir el RUC en cada petición
Si el modo de tu clave tiene un solo RUC activo, no hace falta indicarlo. Con varios, envía ruc en el cuerpo de los POST y ?ruc= en las consultas. Un RUC que no es del workspace responde 403 ISSUER_FORBIDDEN; uno que existe solo en el otro modo responde 404 ISSUER_NOT_FOUND o 403 ISSUER_FORBIDDEN.
