CertRent Open API
随时可得的已验证租客。
通过一套 REST API 登记租客、请求其同意,并读取银行验证的收入、租金记录、身份以及经产权核实的房东推荐人。每次响应都附带同意回执和分市场的筛选规则。
Sandbox 密钥即时签发且永久免费。Live 密钥需要经过一次简短审核。
验证一次,处处申请
您登记的租客会建立一份归自己所有的档案。如果他们此前已为另一处房产完成验证,您的请求可在数秒内获批——无需重新筛选,也无需重复付费。
以租客授权为前提的设计
未经租客授予限定范围、限定时间的同意,任何已验证内容都无法读取。每一次授权都会生成一份双方均可审计的同意回执。
合规内嵌于接口
可向任一端点查询纽约市或洛杉矶适用哪些规则——费用上限、收入来源保护、公平机会时限、不利决定义务——并通过 API 提交您的不利决定记录。
快速上手
从零到一次筛选决策
在 sandbox 中,登记租客会立即生成一位完全通过验证的虚拟租客——因此您可以在任何真实申请人接触之前完成整套集成开发。
1. 登记一位租客(免费)
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. 向租客请求同意
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. 读取决策对象
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()
决策对象
已验证的事实和一项负担能力比率——绝非评分,也绝非批准或拒绝的结论。决定权始终在您手中。
{
"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" }
}
推荐人
端点
基础 URL https://certrent.com/api/v1 · Bearer 认证
| 方法 | 路径 | 密钥范围 | 功能说明 |
|---|---|---|---|
| GET | /me | — | 您的客户端、密钥范围、价格和当前用量。 |
| GET | /usage?period=YYYY-MM | — | 某一计费周期的计量用量。 |
| GET | /compliance?market=nyc|la | — | 该市场适用的筛选规则和义务。 |
| POST | /renters | renters:write | 登记一位租客并向其发出邀请。免费。 |
| GET | /renters | renters:read | 列出您登记的租客。可按状态、邮箱或 external_id 筛选。 |
| GET | /renters/{id} | renters:read | 单个租客关联及其状态。 |
| POST | /renters/{id}/reinvite | renters:write | 重新发送邀请邮件。 |
| DELETE | /renters/{id} | renters:write | 移除您的关联。绝不会删除租客的账户。 |
| POST | /renters/{id}/access-requests | renters:write | 请求租客同意特定的授权范围。 |
| GET | /access-grants/{id} | renters:read | 同意的状态、范围和有效期。 |
| GET | /access-grants/{id}/receipt | renters:read | 机器可读的同意回执。 |
| DELETE | /access-grants/{id} | renters:write | 释放您不再需要的访问权限。 |
| GET | /renters/{id}/decision | renters:read | 筛选决策对象。在 live 环境中按用量计费。 |
| GET | /renters/{id}/profile | renters:read | 经同意的完整档案。在 live 环境中按用量计费。 |
| GET/POST | /webhooks | renters:read / webhooks:write | 列出或创建端点。 |
| PATCH/DELETE | /webhooks/{id} | webhooks:write | 更新或移除端点。 |
| POST | /webhooks/{id}/test | webhooks:write | 发送一个带签名的测试事件。 |
| GET | /webhooks/{id}/deliveries | renters:read | 查看我们发送了什么以及推送结果。 |
| POST | /adverse-actions | renters:write | 提交拒绝或附条件录取的记录。 |
| GET | /adverse-actions | renters:read | 您的不利决定记录。 |
读取和写入权限分别审批。仅具有 renters:read 的密钥可以筛选,但无法登记租客。
同意范围
这些权限由租客授予,而非由我们授予。授权范围之外的内容根本不会出现在响应中。
- read:identity
- 已验证身份(姓名、验证状态——绝不含您的身份证件)
- read:income
- 银行验证的收入与负担能力
- read:rent_history
- 租金付款记录
- read:references
- 经产权验证的房东推荐人
- read:decision
- RentReady 决策总体摘要
Webhook
每次推送都带有 CertRent-Signature 头:t={timestamp},v1={HMAC-SHA256 of "{timestamp}.{raw body}" using your endpoint secret}。在信任载荷之前请先验证它。失败会按退避策略重试,最多六次。
- renter.invited
- 租客已被登记并受邀完成验证。
- renter.registered
- 受邀租客创建了自己的 CertRent 账户。
- renter.verified
- 租客完成了某一项验证(或全部验证)。
- renter.income_updated
- 租客的银行关联收入发生了变化。
- grant.created
- 租客同意向您分享其档案。
- grant.revoked
- 租客撤销了此前授予的同意。
- rent_report.updated
- 租客的租金上报状态发生了变化。
两套环境
ck_test_…— Sandbox。即时签发,永久免费。登记时会生成一位已验证的虚拟租客,并自动授予同意,因此您可以端到端地开发整个流程。绝不涉及真实的人。ck_live_…— Live。在对您的公司和使用场景进行简短审核后签发。真实租客、真实同意、按用量计费。
Sandbox 与 live 数据绝不混用:一个密钥只能看到自己所属的环境。
价格
您只为一件事付费:读取已验证档案。
联系我们
- ✓ 登记并邀请租客——免费。
- ✓ 同意请求、webhook、合规查询——均免费。
- ✓ 按每位租客每个自然月收费一次,无论您读取多少次。
- ✓ Sandbox —— 永久免费。
常见问题
有用于租客审核的 API 吗?
可以。CertRent Open API 让物业管理公司能够在自己的租赁软件中审核申请人,通过标准的 REST 接口配合密钥调用。Sandbox 密钥即时签发且免费;Live 访问需经过一次简短审核后开通。
我如何通过 API 验证申请人的收入?
CertRent 直接从租客本人的银行连接读取收入,而不是依赖上传的文件,因此不存在可伪造的工资单。您的集成系统登记申请人,申请人授予同意,随后您即可获得已验证的月收入,以及相对于您所审核租金的可负担比率。
在我查看租客档案之前,是否必须先取得其同意?
是的,始终如此。在该租客批准您的具体请求、并选定您可查看的类别及查看时长之前,任何已验证内容都无法读取。每一次批准都会生成一份同意回执,且租客可随时撤销访问权限。
租客审核 API 如何收费?
登记租客、邀请租客、接收 webhook 以及查询合规规则均为免费。只有在您读取已验证档案时才会计费,按每位申请人每个自然月收费一次。Sandbox 永久免费。
一份已验证档案可以在不同房东之间重复使用吗?
这正是这个网络的意义所在。租客只需创建一份已验证档案,即可在每一次申请中重复使用;因此已为其他房源完成验证的申请人,只需数秒即可批准您的请求,无需重新审核、重新付费。