选择您的城市

纽约 洛杉矶
CertRent CertRent 放心租房

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 永久免费。

一份已验证档案可以在不同房东之间重复使用吗?

这正是这个网络的意义所在。租客只需创建一份已验证档案,即可在每一次申请中重复使用;因此已为其他房源完成验证的申请人,只需数秒即可批准您的请求,无需重新审核、重新付费。

准备开始开发了吗?

注册、复制您的 sandbox 密钥,几分钟内即可发出第一次调用。