Receptor CPE/Recibos por Honorarios

Recibos por Honorarios (RxH)

Lista y descarga los recibos por honorarios electrónicos (RH) y sus notas de crédito (NC) que recibiste de trabajadores independientes. Usa la misma API key del módulo Receptor, con clave SOL configurada.

GET/api/v1/sunat/receptor/rxh

Requisito: habilitar el permiso de RxH en SOL

La mayoría de los usuarios SOL secundarios están habilitados solo para “Consulta de Comprobantes”, no para “Recibo por Honorarios”. Si tu usuario no lo tiene, este endpoint responde 422 con un mensaje accionable.

El titular del RUC lo activa una sola vez:

  1. Ingresar a SUNAT SOL con el usuario principal (el RUC).
  2. Ir a Menú SOL → Administración de Usuarios Secundarios.
  3. Editar el usuario secundario cuyas credenciales cargaste en IntegraCPE.
  4. Habilitar la opción “Recibo por Honorarios Electrónico” → Consulta (y guardar).

1. Listar RxH de un periodo

GET /api/v1/sunat/receptor/rxh?periodo=YYYYMM devuelve los RH y NC del periodo. Cada fila trae su document_id, que usarás para descargar el XML o el PDF.

Parámetros

NombreTipoDescripción
periodorequeridostringPeriodo en formato YYYYMM (ej. 202606). El backend deriva el rango de fechas.
pagenumberPágina de 500 resultados. Default 1. El 99% de los casos cae en la página 1.
force_refreshbooleanIgnora el caché de 1 hora y consulta a SUNAT. Mismo costo (1 request).

Ejemplo de Código

1curl -X GET \
2 "https://api.integracpe.com/api/v1/sunat/receptor/rxh?periodo=202606" \
3 -H "Authorization: Bearer sk_live_tu_api_key"

Respuesta Exitosa

200 OK
{
"success": true,
"periodo": "202606",
"items": [
{
"document_id": "10736741178-RH-E001-1",
"tipo": "RH",
"serie_numero": "E001-1",
"fecha_emision": "13/06/2026",
"estado": "NO ANULADO",
"ruc_emisor": "10736741178",
"razon_social_emisor": "MARQUEZ VASQUEZ ANGELLO SEBASTIAN",
"moneda": "SOLES",
"renta_bruta": "3500.00",
"renta_neta": "3500.00",
"monto_pendiente_pago": "0.00"
}
],
"total": 1,
"page": 1,
"page_size": 500,
"has_more": false,
"cached": false,
"cached_at": null
}

Sin permiso de RxH en SOL

422 Unprocessable Entity
{
"error": {
"code": "sunat.rxh_permission_required",
"message": "Tu usuario SOL no tiene habilitado 'Recibo por Honorarios'. El titular del RUC debe activarlo en SUNAT → Menú SOL → Administración de usuarios secundarios."
}
}

2. Descargar XML y PDF

GET /api/v1/sunat/receptor/rxh/xml/{document_id} y .../rxh/pdf/{document_id}. El XML es UBL firmado: Invoice para un recibo (RH) y CreditNote para su nota de crédito (NC).

Parámetros

NombreTipoDescripción
document_idrequeridostringFormato {ruc_emisor}-{RH|NC}-{serie}-{numero} (ej. 10736741178-RH-E001-1). RH = recibo, NC = su nota de crédito.

Ejemplo de Código

1# XML firmado (Invoice para RH, CreditNote para NC)
2curl -X GET \
3 "https://api.integracpe.com/api/v1/sunat/receptor/rxh/xml/10736741178-RH-E001-1" \
4 -H "Authorization: Bearer sk_live_tu_api_key"
5
6# PDF
7curl -X GET \
8 "https://api.integracpe.com/api/v1/sunat/receptor/rxh/pdf/10736741178-RH-E001-1" \
9 -H "Authorization: Bearer sk_live_tu_api_key"

Respuesta del XML

200 OK
{
"success": true,
"document_id": "10736741178-RH-E001-1",
"filename": "RHE001-1.xml",
"xml_base64": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgi..."
}

Respuesta del PDF

200 OK
{
"success": true,
"document_id": "10736741178-RH-E001-1",
"filename": "RHE001-1.pdf",
"pdf_base64": "JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1BhZ2U..."
}

Documento inexistente

404 Not Found
{
"error": {
"code": "resource.not_found",
"message": "RxH no encontrado en SUNAT."
}
}

Notas de crédito de un recibo

Un recibo y su nota de crédito comparten serie-número. El document_id lleva el tipo (RH o NC) para descargar el documento correcto. Ambos aparecen en el listado del periodo.

Contrato de cobro

  • El listado cobra 1 request (se sirva de SUNAT o del caché).
  • Cada XML cobra 1 request. Cada PDF cobra 1 request.
  • Consumen de la misma bolsa/plan del módulo Receptor, sin ponderar.
  • No hay CDR para RxH: no se emite constancia de recepción.

Caché del listado

El listado de un periodo se cachea 1 hora. Repetir la misma consulta responde al instante (cached: true) y no vuelve a golpear a SUNAT — aunque cobra igual. Usá force_refresh=true para datos frescos.