CertRent Open API
Inquilinos verificados, cuando los necesites.
Inscribe a un inquilino, pide su consentimiento y lee ingresos verificados por el banco, historial de renta, identidad y referencias de propietarios con propiedad comprobada — todo con una sola API REST. Cada respuesta incluye comprobantes de consentimiento y las reglas de evaluación de cada mercado.
Las claves de sandbox se emiten al instante y son gratis para siempre. Las claves live requieren una breve revisión.
Verifícate una vez, postula donde sea
Los inquilinos que inscribes crean un perfil que es suyo y conservan. Si ya se verificaron para otra propiedad, tu solicitud puede aprobarse en segundos — sin volver a evaluarlos ni a pagar.
Con permiso del inquilino por diseño
Nada de lo verificado se puede leer sin un consentimiento del inquilino con alcance definido y tiempo limitado. Cada consentimiento genera un comprobante que ambas partes pueden auditar.
Cumplimiento integrado en la respuesta
Pregúntale a cualquier endpoint qué reglas rigen en NYC o Los Ángeles — topes de cuotas, protección por fuente de ingresos, plazos de fair chance, obligaciones de acción adversa — y presenta tus acciones adversas a través de la API.
Inicio rápido
De cero a una decisión de evaluación
En sandbox, inscribir a un inquilino crea al instante uno sintético y totalmente verificado — así puedes construir toda la integración antes de que la toque un solo solicitante real.
1. Inscribe a un inquilino (gratis)
POST /renters
curl -X POST https://certrent.com/api/v1/renters \
-H "Authorization: Bearer ck_test_…" \
-H "Content-Type: application/json" \
-d '{
"email": "applicant@example.com",
"name": "Dana Ruiz",
"property": "120 W 45th St",
"unit": "7B",
"market": "nyc",
"external_id": "your-crm-id-4471"
}'
$res = Http::withToken('ck_test_…')
->post('https://certrent.com/api/v1/renters', [
'email' => 'applicant@example.com',
'name' => 'Dana Ruiz',
'property' => '120 W 45th St',
'unit' => '7B',
'market' => 'nyc',
'external_id' => 'your-crm-id-4471',
])->json();
$renterId = $res['id'];
const res = await fetch('https://certrent.com/api/v1/renters', {
method: 'POST',
headers: {
Authorization: 'Bearer ck_test_…',
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: 'applicant@example.com',
name: 'Dana Ruiz',
property: '120 W 45th St',
unit: '7B',
market: 'nyc',
external_id: 'your-crm-id-4471',
}),
});
const renter = await res.json();
import requests
renter = requests.post(
'https://certrent.com/api/v1/renters',
headers={'Authorization': 'Bearer ck_test_…'},
json={
'email': 'applicant@example.com',
'name': 'Dana Ruiz',
'property': '120 W 45th St',
'unit': '7B',
'market': 'nyc',
'external_id': 'your-crm-id-4471',
},
).json()
2. Pide el consentimiento del inquilino
POST /renters/{id}/access-requests
curl -X POST https://certrent.com/api/v1/renters/42/access-requests \
-H "Authorization: Bearer ck_test_…" \
-H "Content-Type: application/json" \
-d '{
"scopes": ["read:identity","read:income","read:rent_history","read:decision"],
"purpose": "Tenant screening for 120 W 45th St, Unit 7B",
"expires_in_days": 30
}'
Http::withToken('ck_test_…')->post("https://certrent.com/api/v1/renters/{$renterId}/access-requests", [
'scopes' => ['read:identity', 'read:income', 'read:rent_history', 'read:decision'],
'purpose' => 'Tenant screening for 120 W 45th St, Unit 7B',
'expires_in_days' => 30,
]);
await fetch(`https://certrent.com/api/v1/renters/${renter.id}/access-requests`, {
method: 'POST',
headers: { Authorization: 'Bearer ck_test_…', 'Content-Type': 'application/json' },
body: JSON.stringify({
scopes: ['read:identity', 'read:income', 'read:rent_history', 'read:decision'],
purpose: 'Tenant screening for 120 W 45th St, Unit 7B',
expires_in_days: 30,
}),
});
requests.post(
f"https://certrent.com/api/v1/renters/{renter['id']}/access-requests",
headers={'Authorization': 'Bearer ck_test_…'},
json={
'scopes': ['read:identity', 'read:income', 'read:rent_history', 'read:decision'],
'purpose': 'Tenant screening for 120 W 45th St, Unit 7B',
'expires_in_days': 30,
},
)
3. Lee la decisión
GET /renters/{id}/decision?rent=3200
curl "https://certrent.com/api/v1/renters/42/decision?rent=3200" \
-H "Authorization: Bearer ck_test_…"
$decision = Http::withToken('ck_test_…')
->get("https://certrent.com/api/v1/renters/{$renterId}/decision", ['rent' => 3200])
->json();
const decision = await (await fetch(
`https://certrent.com/api/v1/renters/${renter.id}/decision?rent=3200`,
{ headers: { Authorization: 'Bearer ck_test_…' } },
)).json();
decision = requests.get(
f"https://certrent.com/api/v1/renters/{renter['id']}/decision",
headers={'Authorization': 'Bearer ck_test_…'},
params={'rent': 3200},
).json()
El objeto de decisión
Datos verificados y una relación de capacidad de pago — nunca un puntaje, nunca una aprobación o rechazo. La decisión sigue siendo tuya.
{
"profile_id": 318,
"completeness": 100,
"rentready": true,
"verified": { "identity": true, "income": true, "rent_history": true, "references": true },
"income": { "monthly_income_verified": 9400.0, "method": "bank_connected" },
"affordability": {
"status": "meets_standard",
"rent": 3200.0,
"income_to_rent_ratio": 2.94,
"rent_to_income_percent": 34.0,
"max_affordable_rent": 3133.33
},
"rent_history": { "months_observed": 12, "on_time_payments": 12, "observed_rent": 2820.0 },
"references": { "total": 2, "ownership_verified": 2 },
"confidence": { "level": "high", "income_method": "bank_connected" },
"signals": [
{ "code": "income_bank_connected", "severity": "info",
"message": "Income was read directly from the renter's bank …" }
],
"consent": { "grant_id": 77, "expires_at": "2026-08-25T14:02:11+00:00" }
}
Referencia
Endpoints
URL base https://certrent.com/api/v1 · Autenticación Bearer
| Método | Ruta | Alcance de la clave | Qué hace |
|---|---|---|---|
| GET | /me | — | Tu cliente, alcances de las claves, precios y uso actual. |
| GET | /usage?period=YYYY-MM | — | Uso medido de un periodo de facturación. |
| GET | /compliance?market=nyc|la | — | Reglas y obligaciones de evaluación que rigen en ese mercado. |
| POST | /renters | renters:write | Inscribe a un inquilino e invítalo. Gratis. |
| GET | /renters | renters:read | Lista los inquilinos que inscribiste. Filtra por estado, correo o external_id. |
| GET | /renters/{id} | renters:read | Un vínculo con un inquilino y su estado. |
| POST | /renters/{id}/reinvite | renters:write | Reenvía el correo de invitación. |
| DELETE | /renters/{id} | renters:write | Elimina tu vínculo. Nunca borra la cuenta del inquilino. |
| POST | /renters/{id}/access-requests | renters:write | Pide al inquilino que dé su consentimiento para alcances específicos. |
| GET | /access-grants/{id} | renters:read | Estado, alcances y vencimiento del consentimiento. |
| GET | /access-grants/{id}/receipt | renters:read | El comprobante de consentimiento legible por máquina. |
| DELETE | /access-grants/{id} | renters:write | Libera el acceso que ya no necesitas. |
| GET | /renters/{id}/decision | renters:read | El objeto de decisión de evaluación. Se mide en live. |
| GET | /renters/{id}/profile | renters:read | El perfil completo consentido. Se mide en live. |
| GET/POST | /webhooks | renters:read / webhooks:write | Lista o crea un endpoint. |
| PATCH/DELETE | /webhooks/{id} | webhooks:write | Actualiza o elimina un endpoint. |
| POST | /webhooks/{id}/test | webhooks:write | Envía un evento de prueba firmado. |
| GET | /webhooks/{id}/deliveries | renters:read | Revisa qué enviamos y cómo resultó. |
| POST | /adverse-actions | renters:write | Registra la constancia de una denegación o de una oferta condicionada. |
| GET | /adverse-actions | renters:read | Tu historial de acciones adversas. |
El acceso de lectura y el de escritura se aprueban por separado. Una clave que solo tiene renters:read puede evaluar pero nunca inscribir.
Alcances del consentimiento
El inquilino es quien los otorga, no nosotros. Todo lo que quede fuera del consentimiento simplemente no aparece en la respuesta.
- read:identity
- Identidad verificada (nombre, estado de verificación — nunca tu documento de identidad)
- read:income
- Ingresos verificados por el banco y capacidad de pago
- read:rent_history
- Historial de pagos de renta
- read:references
- Referencias de propietarios con propiedad verificada
- read:decision
- El resumen general de la decisión RentReady
Webhooks
Cada entrega lleva un encabezado CertRent-Signature: t={timestamp},v1={HMAC-SHA256 de "{timestamp}.{raw body}" usando el secreto de tu endpoint}. Verifícalo antes de confiar en un payload. Los fallos se reintentan con backoff hasta seis intentos.
- renter.invited
- Se inscribió a un inquilino y se le invitó a verificarse.
- renter.registered
- Un inquilino invitado creó su cuenta de CertRent.
- renter.verified
- Un inquilino completó una vía de verificación (o todas).
- renter.income_updated
- Cambiaron los ingresos conectados al banco de un inquilino.
- grant.created
- Un inquilino dio su consentimiento para compartir su perfil contigo.
- grant.revoked
- Un inquilino revocó un consentimiento otorgado previamente.
- rent_report.updated
- Cambió el estado de reporte de renta de un inquilino.
Dos entornos
ck_test_…— Sandbox. Se emite al instante, gratis para siempre. Inscribir crea un inquilino verificado sintético y el consentimiento se otorga automáticamente, así que puedes construir todo el flujo de principio a fin. Nunca es una persona real.ck_live_…— Live. Se emite tras una breve revisión de tu empresa y tu caso de uso. Inquilinos reales, consentimiento real, con medición de uso.
Los datos de sandbox y de live nunca se mezclan: una clave solo ve su propio entorno.
Precios
Pagas por una sola cosa: leer un perfil verificado.
Habla con nosotros
- ✓ Inscribir e invitar inquilinos — gratis.
- ✓ Solicitudes de consentimiento, webhooks, consultas de cumplimiento — gratis.
- ✓ Se cobra una vez por inquilino por mes calendario, sin importar cuántas veces lo leas.
- ✓ Sandbox — gratis para siempre.
Preguntas frecuentes
¿Existe una API para la evaluación de inquilinos?
Sí. La CertRent Open API permite que una empresa de administración de propiedades evalúe a los solicitantes desde su propio software de arrendamiento, mediante una interfaz REST estándar con una clave secreta. Las claves de sandbox se emiten al instante y son gratis; el acceso live se otorga tras una breve revisión.
¿Cómo verifico los ingresos de un solicitante a través de una API?
CertRent lee los ingresos desde la propia conexión bancaria del inquilino y no desde documentos subidos, así que no hay recibo de sueldo que falsificar. Tu integración inscribe al solicitante, el solicitante da su consentimiento y tú recibes los ingresos mensuales verificados junto con una razón de asequibilidad frente a la renta que estás evaluando.
¿El inquilino tiene que dar su consentimiento antes de que yo pueda ver su perfil?
Sí, siempre. Nada de lo verificado se puede leer hasta que ese inquilino apruebe tu solicitud específica, eligiendo qué categorías puedes ver y por cuánto tiempo. Cada aprobación genera un comprobante de consentimiento, y el inquilino puede revocar el acceso en cualquier momento.
¿Cuánto cuesta la API de evaluación de inquilinos?
Inscribir inquilinos, invitarlos, recibir webhooks y consultar las reglas de cumplimiento son acciones gratuitas. Solo se te cobra cuando lees un perfil verificado, una vez por solicitante por mes calendario. El sandbox es gratis para siempre.
¿Se puede reutilizar un mismo perfil verificado con varios arrendadores?
Ese es el propósito de la red. Un inquilino crea un perfil verificado y lo reutiliza en cada solicitud, así que un solicitante ya verificado para otra propiedad puede aprobar tu solicitud en segundos en lugar de ser evaluado y cobrado de nuevo.
¿Listo para construir?
Regístrate, copia tu clave de sandbox y haz tu primera llamada en unos minutos.