/check_partner_kyc

Returns whether entity attached to partnered app is verified, not valid, or still pending.

The endpoint is used to check KYC status of end users across apps.
Example: App A is seeking to enable services for their users through app B. App B has a need to verify that the users have been KYC'd and passed.

The KYC status would be looked up based on match on queried user handle and app handle, so the customer calling the API would have to know both in order to get results.

❗️

This endpoint must be enabled by a support request to Sila to establish the mapping between apps.

Requests

The request body at this endpoint is the header_msg JSON object.

The handle which seeking KYC confirmation should be in the header.auth handle field.

The required query_app_handle field is used for partner company app.
The required query_user_handle field is used for entity (user) of partner company app.

"query_app_handle": "PARTNER_COMPANY_APP"
"query_user_handle": "PARTNER_USER_HANDLE"

Authorization / Authentication

Apps using Access Token Authorization

Use a valid access token in an Authorization: Bearer request header.

See Authenticating with an Access Token for more details.

Apps using ECDSA Authentication

Only authsignature header is required for this request.

See the section on ECDSA Authentication for more detail about ECDSA signature generation.

POST /0.2/check_partner_kyc HTTP/1.1
sandbox.silamoney.com
Content-Type: application/json
// if using OAuth2
Authorization: Bearer [GENERATED JWT TOKEN HERE]
// if using ECDSA
authsignature: [GENERATED AUTHSIGNATURE HEX STRING HERE]

{
  "header": {
    "created": 1234567890, 
    "app_handle": "handle.silamoney.eth", 
    "version": "0.2", 
    "crypto": "ETH", 
    "reference": "<your unique id>"
  }, 
  "query_app_handle": "cross_app_name",
  "query_user_handle": "cross_app_user"
}

***

HTTP/1.1 200 OK

{
  "success": true,
  "status": "SUCCESS",
  "message": "cross_app_user has passed ID verification!",
  "response_time_ms": "171",
  "reference": "<your unique id>",
  "entity_type": "individual",
  "verification_status": "passed",
}

---

{
  	"success": false,
    "status": "FAILURE",
    "message": "cross_app_user is pending ID verification.",
   "response_time_ms": "171",
    "reference": "<your unique id>",
    "entity_type": "individual",
    "verification_status": "pending"
}

---

{
  	"success": false,
    "status": "FAILURE",
    "message": "cross_app_user has failed ID verification.",
   "response_time_ms": "171",
   "reference": "<your unique id>",
    "entity_type": "individual",
    "verification_status": "failed",
}
ApiResponse response = api.checkPartnerKyc("query app handle", "query user handle");
CheckPartnerKycResponse parsedResponse = (CheckPartnerKycResponse) response.getData();

parsedResponse.getStatus(); 
parsedResponse.getMessage();
parsedResponse.getReference();
parsedResponse.getEntityType();
parsedResponse.getVerificationStatus();
// data to send
$userHandle = 'user.silamoney.eth';
$queryAppHandle = 'appB.silamoney.auth'; // The app where the user to check was registered.
$queryUserHandle = 'userB.silamoney.eth'; // The user to be checked.

$response = $client->ckeckPartnerKYC($userHandle, $queryAppHandle, $queryUserHandle);

// Success 200
echo $response->getStatusCode(); // 200
echo $response->getData()->reference; // Random reference.
echo $response->getData()->status; // SUCCESS
echo $response->getData()->message; // User has passed ID verification!
echo $response->getData()->entity_type; // 'individual' or 'business'.
echo $response->getData()->verification_status; // passed.
$response->getData()->valid_kyc_levels; // An array of KYC levels valid for the user.

// Additional business values
echo $response->getData()->certification_status; // certified
$response->getData()->certification_history; // An array of all the certifications executed for the business (administrator user handle, created, expires after...)
$response->getData()->members; // An array of users linked to the business and their verification and certification status (user handle, role, beneficial owner certification status...)
let res = await sila.checkPartnerKyc({
    query_app_handle: "query_app_handle",
    query_user_handle: "query_user_handle"
});

res.success;
res.status;
res.message;
res.reference;
res.entity_type;
res.verification_status;
payload = {
    "query_app_handle": "app handle",
    "query_user_handle": "user handle"
}
response = User.check_partner_kyc(app, payload)

respone['success']
respone['status']
respone['message']
respone['reference']
respone['entity_type']
respone['verification_status']
var response = api.CheckPartnerKyc(
    queryAppHandle: "query app handle",
    queryUserHandle: "query user handle"
);

var parsedresponse = (CheckPartnerKycResponse)response.Data;

parsedresponse.Success;
parsedresponse.EntityType;
parsedresponse.Message;
parsedresponse.Reference;
parsedresponse.Status;
parsedresponse.VerificationStatus;
KeyTypeDescription
headerJSON objectRequired. Requires these keys in JSON format: created, app_handle. See the /check_handle endpoint for the complete list of fields in this object.
query_app_handleStringRequired. Alphanumeric value.
This value should match the required regex pattern: ^[-a-zA-Z0-9_.]+$ (not including .silamoney.com portion).
Examples: handle.silamoney.eth or handle
query_user_handleStringRequired. Alphanumeric value.
This value should match the required regex pattern: ^[-a-zA-Z0-9_.]+$ (not including .silamoney.com portion).
Examples: handle.silamoney.eth or handle

Responses

There are several new keys in the /check_partner_kyc response:

  • entity_type: Value will always be "individual" for individual users.
  • verification_status: For individual users, this value can be one of: ["unverified", "pending", "passed", "failed"]. There are descriptions of these statuses in the table below.

🚧

Verification Statuses

More verification statuses than these may be added in the future, so please implement accordingly.

Status Codesuccess Attributeverification_status AttributeDescription
200true"passed"The query user handle has successfully passed KYC verification.
200false"unverified"Verification has not been requested for this query user handle.
200false"pending"The query user handle is still pending KYC verification.
200false"failed"The query user handle has failed KYC verification.
200false"webhook_pending"Awaiting additional verification.
400falseN/ABad request - check message and/or validation_details keys for more information.
401falseN/Aauthsignature or usersignature header was absent or incorrect.
403falseN/AQuery User Handle not registered by query app.
403falseN/ACross-app permission has not been granted for this app.