了解 API

Jobs

可用资源

Smile 开放 API 中的可用资源由两种类型组成:

  • Smile 网络资源
  • 用户数据

Smile 网络资源

这些是用于与 Smile 开放 API 集成并从中获取数据的数据资源。

大多数 Smile 产品和流程使用通用资源,也有一些资源是您希望实施的特定流程所特有的。

通用资源

ResourceProcess描述
ProvidersGeneralSmile 网络中可用的就业数据提供商列表。数据提供商进一步细分为不同的子类型,如零工平台、人力资源平台等。
UsersGeneral这些是您的用户,他们已经启动了账户关联流程,并同意与您和 Smile 共享其就业数据。创建新用户时,会同时发放一个Token。
TokensGeneral用于访问用户账户相关数据的Token。您可以使用此资源检索现有Token,或为现有用户刷新Token。
WebhooksGeneral当您的环境中发生事件时,Webhook 用于实时通知您的应用程序。
Consent TemplatesGeneral将您的同意书存储在 Smile API 中,以便在处理用户数据时更方便地引用用户的同意。
AccountsAccount Linking您的用户已成功登录的账户,将从中检索与账户相关的数据。更多信息,请参阅下面的 “源数据”。
InvitesAccount Linking您可以使用此功能邀请用户通过他们首选的通信渠道(如电子邮件)关联他们的工作账户。
Invite TemplatesAccount Linking如果您要通过邀请邀请用户关联他们的工作账户,请使用此功能定义和检索邀请的外观。
ArchivesDocument Processing这是指包含用户上传的扫描或拍摄文档文件的存档。
File TypesDocument Processing指接受上传的文件类型,上传后将作为存档提供。

用户数据资源

用户数据可以来自关联的账户、上传的数据,也可以通过验证或信号请求获得。

为了能够检索丰富的用户数据(如收入和就业数据)并在您的应用程序中使用,您需要使用我们的账户关联、文档处理或表单处理产品,并将其集成到您的应用程序中。否则,我们的风险筛查产品仍然可以提供有价值的数据。

丰富的用户数据

📘

注意

要了解有关 Wink Widget的更多信息,请查看 “获取用户数据” 部分

如果您要将客户端 SDK 嵌入到自己的应用程序中,您需要实例化该Widget,之后将在 Smile 中创建一个用户,并获得一个短期Token。实例化Widget时,您的用户首先需要同意 Smile 代表他们检索该数据。之后,我们将显示一个就业和收入数据提供商列表,供您的用户选择。然后,他们需要执行以下操作之一:

  1. 使用数字数据提供商进行身份验证。 如果我们与该数据提供商有直接连接,我们将在列表中显示该提供商,用户可以从中选择。如果他们在任何显示的提供商处有账户,他们可以选择该提供商,然后输入他们在所选数据提供商处的凭据。授予权限后,将在 Smile 网络中创建一个账户,从中检索、汇总数据并将其规范化为标准模式,并以对开发者友好的 JSON 格式发送给您。
  2. 上传包含其就业或收入信息的扫描或拍摄文档。 并非所有源就业和收入信息都是数字形式。通常,此类信息仍然以纸质文档的形式存在。用户可以扫描或拍摄这些文档并上传,然后我们可以对其进行数字化处理并从中检索相关数据,在大多数情况下,还可以将数据(通过光学字符识别或 OCR)提取为对开发者友好的 JSON 格式。如果我们无法自动提取信息,我们将始终通过 /archives 端点提供上传文件的 URL。
ResourceType描述
IdentityUser Data从现任和前任雇主那里获得经过审核的身份信息,如姓名、联系信息、居住地址等。
TransactionsUser Data从源数据提供商那里获得用户的详细财务交易信息。这包括源提供商记录的增加项(或信贷)和扣除项(或借贷)。
RatingsUser Data获取用户的工作绩效评级信息。
DocumentsUser Data获取文档信息,如他们的驾驶执照、国民身份证等。
EmploymentsUser Data获取以前的就业信息,如用户曾工作过的公司、职位、任期等。
IncomesUser Data获取以前的收入信息,如毛工资和净工资,以及构成收入的其他部分。
来自 Contributions 和 Transactions 的 Estimated Income (抢先体验版) 数据也将在有限时间内免费提供。
ContributionsUser Data获取以前的社会保障缴款信息,以了解收入水平。
LiabilitiesUser Data获取从与就业相关的数据源和社会保障服务获得的当前和以前的贷款信息。

可操作的用户洞察

ResourceType描述
Verification RequestsRisk Screening验证可以帮助您确认用户提供的数据与预验证和/或权威来源的数据是否匹配。
Signal RequestsRisk Screening仅通过电话号码或电子邮件地址获取有关用户行为的关键风险信号。
FootprintsRisk Screening获取有关用户数字足迹和在线活动的有价值见解。
Multiple Application WarningRisk Screening发现用户贷款活动的早期迹象。
Blacklist确保您的用户未被列入黑名单。

Modes

操作模式

API 有两种模式,可通过向不同的基础 URL 发送请求来访问。您获得的每个 API 客户端密钥只能用于单一模式。例如:授予访问SANDBOX模式的 API 客户端 ID 和密钥只能在该模式下使用。

模式主机描述
Sandboxhttps://sandbox.smileapi.io/v1使用SANDBOX模式来构建和测试您的集成。在此模式下,您必须使用测试凭据向就业数据提供商进行身份验证。所有 API 端点将返回模拟数据,不会返回实际的用户数据。所有用户的SANDBOX模式将立即开启。
Productionhttps://open.smileapi.io/v1PRODUCTION模式用于将您的集成上线。您的最终用户将使用他们的登录凭据向他们的就业数据提供商进行身份验证。API 端点返回真实数据,在此模式下,所有 API 调用都需要计费。访问PRODUCTION模式需要获得批准。

注册后,您将立即免费获得在我们的SANDBOX环境中进行测试的权限。如果您需要访问生产环境,请联系我们

在SANDBOX模式下进行测试

Smile 为我们的生产环境提供了SANDBOX模式,以便您可以使用示例数据测试您的集成。

要使用SANDBOX,您可以使用以下示例凭据:

用户名全名电子邮件手机号码密码验证码社保号码
GeorgeGeorge Palomero Jr.[email protected](+63) 955999123412345612343300000008
RyanRyan Lestari[email protected](+62) 81199943216543211234N/A
ChristinaChristina Tan[email protected](+65) 99996789YGUS11234N/A
AnishaAnisha Bhatia[email protected](+91) 95111987651234561234N/A

SANDBOX模式下的存档仅返回特定的工资单。要在SANDBOX模式下测试存档,您可以在开发者门户中下载示例工资单,并通过 Wink Widget或 API 上传。在SANDBOX模式下上传其他文件将返回错误。


Authentication

身份验证

Smile 开放 API 使用 HTTP 基本身份验证。

基本身份验证是一种内置于 HTTP 协议中的简单身份验证方案。要使用它,请在发送 HTTP 请求时,在 Authorization 标头中包含 Basic 前缀,后跟一个空格和一个 base64 编码的字符串 API Key:API Secret

这些凭据与您的 Smile 租户账户关联,可用于访问 Smile 网络。要检索您的凭据,只需在我们的开发者门户上注册并在开发者门户中访问您的 API 密钥

📘

示例

Authorization: Basic ZGVtbzpwQDU1dzByZA==

要从我们的 API 检索数据,您应在 Authorization 标头中包含 Basic 前缀,后跟一个空格和一个 base64 编码(非加密)的字符串 apikey:apisecretAuthorization: Basic {base64 encoded string}

您可以通过登录开发者门户,在 API Keys 部分找到您的 API 密钥和密钥。

注册后,您将立即免费获得在我们的SANDBOX环境中进行测试的权限。如果您需要访问生产环境,请联系我们

where-to-find-api-keys.png

您可以点击 API Key和Api Secret旁边的复制图标,轻松将其复制到计算机剪贴板。


Versions

版本控制

版本包含在 URI 路径中。例如,它将如下所示:https://open.smileapi.io/v1/

我们使用的版本控制约定是 1.2.3 格式,其中 1 是主版本号,2 是次版本号,3 是补丁更新:

  • 主版本号: URI 中使用的版本号,表示对 API 的重大更改。虽然我们尽量保持更改向后兼容,但有时我们可能需要引入可能会改变现有行为或功能的更改。这些更改将在通过不同 URI 访问的 API 版本中实现(例如 https://open.smileapi.io/v2/)。您可以继续使用现有 URI 以避免破坏现有集成,但为了利用新功能,您必须更新应用程序以指向新版本和 URI。
  • 次版本号和补丁版本号: 这些对客户端是透明的,我们在内部使用它们进行向后兼容的更新。当我们发布次更新或补丁时,您无需更新集成。我们将通过变更日志和电子邮件通知传达这些信息,以便您了解所有这些更改。

Alert

错误消息

HTTP 状态码状态描述Smile 代码消息
400 - 错误请求由于语法不正确,服务器无法理解该请求。客户端在未修改请求的情况下不应重复该请求。INVALID_CREDENTIALS您提供的凭据不正确。
400 - 错误请求由于语法不正确,服务器无法理解该请求。客户端在未修改请求的情况下不应重复该请求。INVALID_PARAMETERS您的请求中发送了缺失或无效的参数。
401 - 未授权表示该请求需要用户身份验证信息。客户端可以使用合适的 Authorization 标头字段重复该请求INVALID_TOKEN您提供的Token无效或已过期。
403 - 禁止访问未经授权的请求。客户端没有访问该内容的权限。与 401 不同,服务器知道客户端的身份。UNAUTHORIZED_ACCESS您没有权限访问此资源。
404 - 未找到服务器找不到请求的资源。MISSING_RESOURCE您提供的资源无法找到或不可用。
415 - 不支持的媒体类型有效负载格式未定义或为不支持的格式。UNSUPPORTED_TYPE请为您的请求指定有效的内容类型。
429 - 请求过多在给定时间内发送了过多请求REQUEST_LIMIT_EXCEEDED您已超出此资源的速率限制。请稍后再试或联系支持人员。
500 - 内部服务器错误服务器遇到意外情况,无法完成请求。SERVER_ERROR我们的系统目前遇到问题。请稍后再试或联系支持人员。
501 - 未实现服务器不支持该 HTTP 方法,无法处理。UNSUPPORTED_METHOD您使用的 HTTP 方法不支持此资源。
503 - 服务不可用服务器未准备好处理该请求。SERVER_UNAVAILABLE服务器无法处理该请求。它可能已关闭或正在维护中。请稍后再试或联系支持人员。
504 - 网关超时服务器无法及时给出响应。TIME_LIMIT_EXCEEDED服务器在规定时间内无法给出响应。请重试或联系支持人员。

结果主体

所有响应均以 JSON 格式编码,并返回以下属性:

  • code
  • message
  • requestId
  • data

如果响应是单个对象,则 data 属性的值就是该对象。例如,Get Identity 端点将返回以下内容,其中 data 属性返回单个 Identity 对象:

{
    "code": "OK",
    "message": "Success!",
    "requestId": "508a2074-9229-4d59-b716-bb6b4221e196",
    "data": {
        "nextCursor": null,
        "items": [
            {
                "id": "t-f4b8293631c84e759d30afebb7d98678",
                "date": "2021-08-06",
                "description": "Order revenue",
                "currency": "PHP",
                "amount": 222.0000,
                "referenceId": "Order ID-945485798532",
                "metadata": {
                    "createdAt": "2022-02-22T05:26:09Z",
                    "itemCreatedAt": "2022-02-22T05:36:09Z",
                    "sourceId": "0e0e97100eec49e8b954e9e419d527fe",
                    "sourceType": "ACCOUNT",
                    "userId": "smilejan-329789936388493f831ad0edd1f8bc8c",
                    "providerId": "upwork"
                }
            },
            {
                "id": "t-281ad47efdc043e796e128ee5bdf50c3",
                "date": "2021-08-07",
                "description": "Order revenue",
                "currency": "PHP",
                "amount": 114.0000,
                "referenceId": "Order ID-023485780332",
                "metadata": {
                    "createdAt": "2022-02-22T05:26:09Z",
                    "itemCreatedAt": "2022-02-22T05:36:09Z",
                    "sourceId": "0e0e97100eec49e8b954e9e419d527fe",
                    "sourceType": "ACCOUNT",
                    "userId": "smilejan-329789936388493f831ad0edd1f8bc8c",
                    "providerId": "upwork"
                }
            },
            {
                "id": "t-6853edd863514eae98b18abf56764fc3",
                "date": "2021-08-08",
                "description": "Platform fee",
                "currency": "PHP",
                "amount": -25.5000,
                "referenceId": "Order ID-934585780080",
                "metadata": {
                    "createdAt": "2022-02-22T05:26:09Z",
                    "itemCreatedAt": "2022-02-22T05:36:09Z",
                    "sourceId": "0e0e97100eec49e8b954e9e419d527fe",
                    "sourceType": "ACCOUNT",
                    "userId": "smilejan-329789936388493f831ad0edd1f8bc8c",
                    "providerId": "upwork"
                }
            },
            {
                "id": "t-9409019eb2f141f898e73775be4c6600",
                "date": "2021-04-04",
                "description": "Order revenue",
                "currency": "PHP",
                "amount": 220.0000,
                "referenceId": "Order ID-934587514002",
                "metadata": {
                    "createdAt": "2022-02-22T05:26:09Z",
                    "itemCreatedAt": "2022-02-22T05:36:09Z",
                    "sourceId": "0e0e97100eec49e8b954e9e419d527fe",
                    "sourceType": "ACCOUNT",
                    "userId": "smilejan-329789936388493f831ad0edd1f8bc8c",
                    "providerId": "upwork"
                }
            },
            {
                "id": "t-a402ac196f404ab5bf1d148c5685624f",
                "date": "2021-08-09",
                "description": "Platform fee",
                "currency": "PHP",
                "amount": -20.0000,
                "referenceId": "Order ID-156987512999",
                "metadata": {
                    "createdAt": "2022-02-22T05:26:09Z",
                    "itemCreatedAt": "2022-02-22T05:36:09Z",
                    "sourceId": "0e0e97100eec49e8b954e9e419d527fe",
                    "sourceType": "ACCOUNT",
                    "userId": "smilejan-329789936388493f831ad0edd1f8bc8c",
                    "providerId": "upwork"
                }
            },
            {
                "id": "t-d318e3b6ad7845fda960a5d5add60bcb",
                "date": "2021-08-10",
                "description": "",
                "currency": "PHP",
                "amount": 59.0000,
                "referenceId": "Order ID-664426992012",
                "metadata": {
                    "createdAt": "2022-02-22T05:26:09Z",
                    "itemCreatedAt": "2022-02-22T05:36:09Z",
                    "sourceId": "0e0e97100eec49e8b954e9e419d527fe",
                    "sourceType": "ACCOUNT",
                    "userId": "smilejan-329789936388493f831ad0edd1f8bc8c",
                    "providerId": "upwork"
                }
            },
            {
                "id": "t-b1b8412a02e5482da260c7dbb045f455",
                "date": "2021-08-12",
                "description": "Platform fee",
                "currency": "PHP",
                "amount": -20.0000,
                "referenceId": "Order ID-234728692099",
                "metadata": {
                    "createdAt": "2022-02-22T05:26:09Z",
                    "itemCreatedAt": "2022-02-22T05:36:09Z",
                    "sourceId": "0e0e97100eec49e8b954e9e419d527fe",
                    "sourceType": "ACCOUNT",
                    "userId": "smilejan-329789936388493f831ad0edd1f8bc8c",
                    "providerId": "upwork"
                }
            }
        ]
    }
}

参数

空值

有时,您可能会在 API 响应中看到某个属性的返回值为 null。这种情况可能发生在以下场景:

  • 数据提供商没有该属性对应的字段。例如,与身份数据相关的 “公民身份” 或 “居住国” 字段可能不存在。
  • 在其他情况下,数据提供商支持该字段,但它是一个可选字段,未启用、处于隐藏状态,或者仅在用户共享信息时不满足某些条件时才会显示。例如,如果用户未在其就业平台上完成账户验证或 KYC 流程,可能无法获取他们的手机号码或地址等详细信息。

ISO

约定和标准

为了便于日志记录和故障排除,我们在向您返回数据时遵循了一些约定。

资源属性前缀示例描述
User IDtenantId-smile1234-a5b39dfe76174defb353d7e97a88a85e在我们的系统中,每个用户 ID 都有一个与其租户 ID 相关的前缀
Identity IDi-i-45567e7689be49d5bc052a6e4a3805e6与身份相关的信息
Transaction IDt-t-11de60721342404daa35f60d2875f37b与交易相关的信息
Rating IDr-r-ff4723f9af5f4dc5b6a22ea27fb3c8a1与评级相关的信息
Document IDd-d-ff4723f9af5f4dc5b6a22ea27fb3c8a1与文档相关的信息
Employment IDe-e-ff4723f9af5f4dc5b6a22ea27fb3c8a1与就业信息相关的信息
Income IDinc-inc-ff4723f9af5f4dc5b6a22ea27fb3c8a1与收入相关的信息
Estimated Incomes ID
(early access)
einc-einc-ff4723f9af5f4dc5b6a22ea27fb3c8a1与预估收入相关的信息
Contribution IDcon-con-ff4723f9af5f4dc5b6a22ea27fb3c8a1与收入相关的信息
Archive IDu-u-ff4723f9af5f4dc5b6a22ea27fb3c8a1可作为存档的上传文件
Invite IDiv-iv-ff4723f9af5f4dc5b6a22ea27fb3c8a1发出的邀请
Invite Template IDivt-ivt-ff4723f9af5f4dc5b6a22ea27fb3c8a1创建的邀请模板

为了标准化数据格式,我们使用普遍接受的标准来格式化数据,包括:

数据类型格式示例标准
dateyyyy-MM-dd2021-04-21ISO 8601 完整日期
date-timeyyyy-MM-ddTHH:mm:ssZ2021-04-21T08:25:05ZISO 8601 完整时间
monthyyyy-MM2021-04ISO 8601 月份
phone numbers+ (国家代码) (地区代码) (电话号码)+65281234567E.164
country codesISO alpha-2'SG' 代表新加坡ISO 3166
currencyISO alpha-3'USD' 代表美元ISO 4217

分页

列表结果和分页

资源或 API 端点可以返回对象列表或集合。默认情况下,我们每次返回 10 条记录,最多返回 150 条。您可以通过传递 size 参数来限制结果数量。有关过滤或限制结果的更多信息,请参阅下面的查询参数部分。

当 Smile 返回一个集合时,我们还会返回一个名为 nextCursor 的值。示例如下:

{
    "code": "OK",
    "message": "Success!",
    "requestId": "17bc5a84-2468-47f6-9d3c-05b5257befa5",
    "data": {
        "nextCursor": "20",
        "items": ["..."]
    }
}

要查看集合中的下一页,只需在查询端点时附加 cursor 参数,使用上一次查询返回的 nextCursor 值来转到集合中的下一页。有关cursor和其他查询参数的更多信息,请参阅下面的内容。


参数

查询参数

返回对象列表或集合的 API 端点可以根据不同的查询参数进行过滤或限制。以下是一些示例:

参数描述
size您希望在集合中返回的对象数量。有关默认值的更多信息,请参阅上文。
cursor使用上一页的nextCursor值来确定此次查询的开始。有关分页的更多信息,请参阅上文。
userId根据关联的用户 ID 过滤结果
sourceId对于与源相关的数据,根据关联的源 ID 过滤结果
startDate对于具有日期属性的数据,能够按日期范围过滤结果
endDate对于具有日期属性的数据,能够按日期范围过滤结果

然而,某些资源有与之关联的独特查询参数。请查看每个端点的文档以了解更多信息。


速率限制

速率限制

Smile 对每个端点的 API 调用次数进行限制,以确保平台的稳定性和可用性。目前,我们仅允许每个 IP 地址每秒最多进行 10 次请求。此限制适用于所有 API 端点。连续发出过多请求的客户端将收到 HTTP 状态码 429(请求过多)的错误。

如果您需要更高的限制,请联系 [email protected]