# Create a KYC request Creates a KYC request. The customer is redirected to the link. After the customer completes the KYC process, they are redirected back to the link. Corresponding webhooks, such as: KYC document accepted and KYC document rejected, are sent to the subscribers. When the complete list of documents is received and accepted, the KYC request fulfilled webhook is sent to subscribers. If a request is successful, it returns a value of or . The corresponding and documents are not requested. Endpoint: POST /kyc-requests Version: latest Security: SecretApiKey, JWT ## Request fields (application/json): - `customerId` (string, required) ID of the customer resource. - `documents` (array, required) Documents to request from the customer. - `documents.type` (string, required) Type of document to request from the customer. Enum: "identity-proof", "address-proof", "funds-proof", "purchase-proof", "credit-file-proof" - `documents.subtypes` (array,null) Permitted document subtype. Enum: "passport", "id-card", "driver-license", "birth-certificate", "utility-bill", "rental-receipt", "lease-agreement", "copy-credit-card", "credit-card-statement", "bank-statement", "inheritance-documentation", "tax-return", "salary-slip", "sale-of-assets", "public-health-card", "proof-of-age-card", "reverse-of-id", "public-service", "ewallet-holder-details", "ewallet-transaction-statement", "marriage-certificate", "firearms-license", "insurance-letter", "income-statement", "debtors-letter", "other", null - `documents.maxAttempts` (integer) Total number of allowed document upload attempts. Use to allow unlimited upload attempts. - `documents.faceProofRequired` (boolean) Specifies if the customer must upload a photo of their face (selfie) that matches a provided KYC document. - `documents.faceLivenessRequired` (boolean) Specifies if the customer must use the face liveness feature when uploading a selfie. For more information, see [Facial recognition and identity verification](https://www.rebilly.com/docs/kyc-and-aml/kyc#facial-recognition-identity-verification). - `redirectUrl` (string,null) URL where the customer is redirected when a KYC document upload is complete. When the customer is redirected, Rebilly appends an query parameter that has one of the following values: - : Customer clicked the link. - : Customer's token expired. - : Customer uploaded KYC documents that have been analyzed. - : Customer uploaded KYC documents that require a manual review. This is because the analyzer rejected the documents or could not process them. - : Some of the customer's KYC documents have been analyzed, but other documents have not. For example, this may occur when a proof of address document is analyzed but proof of ID is not. Example: . - `reason` (string,null) Reason for uploading. Example: "spend limit" - `matchLevel` (integer) Document verification level. Enum: 1, 2, 3 - `expirationTime` (string) Date and time when the request expires. The default value is one hour in the future. ## Response 201 fields (application/json): - `id` (string) ID of the KYC request. Example: "kyc_req_0YV7JMJ3DBCGRBR7K9D4HVGPP5" - `customerId` (string, required) ID of the customer resource. - `documents` (array, required) Documents to request from the customer. - `documents.type` (string, required) Type of document to request from the customer. Enum: "identity-proof", "address-proof", "funds-proof", "purchase-proof", "credit-file-proof" - `documents.subtypes` (array,null) Permitted document subtype. Enum: "passport", "id-card", "driver-license", "birth-certificate", "utility-bill", "rental-receipt", "lease-agreement", "copy-credit-card", "credit-card-statement", "bank-statement", "inheritance-documentation", "tax-return", "salary-slip", "sale-of-assets", "public-health-card", "proof-of-age-card", "reverse-of-id", "public-service", "ewallet-holder-details", "ewallet-transaction-statement", "marriage-certificate", "firearms-license", "insurance-letter", "income-statement", "debtors-letter", "other", null - `documents.maxAttempts` (integer) Total number of allowed document upload attempts. Use to allow unlimited upload attempts. - `documents.faceProofRequired` (boolean) Specifies if the customer must upload a photo of their face (selfie) that matches a provided KYC document. - `documents.faceLivenessRequired` (boolean) Specifies if the customer must use the face liveness feature when uploading a selfie. For more information, see [Facial recognition and identity verification](https://www.rebilly.com/docs/kyc-and-aml/kyc#facial-recognition-identity-verification). - `status` (string) Status of the request. Enum: "gathering", "attempted", "partial", "pending-review", "fulfilled", "failed", "abandoned", "expired" - `redirectUrl` (string,null) URL where the customer is redirected when a KYC document upload is complete. When the customer is redirected, Rebilly appends an query parameter that has one of the following values: - : Customer clicked the link. - : Customer's token expired. - : Customer uploaded KYC documents that have been analyzed. - : Customer uploaded KYC documents that require a manual review. This is because the analyzer rejected the documents or could not process them. - : Some of the customer's KYC documents have been analyzed, but other documents have not. For example, this may occur when a proof of address document is analyzed but proof of ID is not. Example: . - `reason` (string,null) Reason for uploading. Example: "spend limit" - `matchLevel` (integer) Document verification level. Enum: 1, 2, 3 - `revision` (integer) Number of times the KYC request data has been modified. Use this value when analyzing webhook data to determine if a change must take precedence over the current representation. - `expirationTime` (string) Date and time when the request expires. The default value is one hour in the future. - `createdTime` (string) Date and time which is set automatically when the resource is created. - `updatedTime` (string) Date and time which updates automatically when the resource is updated. - `_links` (array) Related links. - `_links.href` (string) Link URL. - `_links.rel` (string) Type of link. Enum: "self", "documents", "gatherer" - `_embedded` (object) Embedded objects that are requested by the query parameter. - `_embedded.documents` (array) ## Response 401 fields (application/json): - `status` (integer) HTTP status code. - `type` (string) Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference. It should provide human-readable documentation for the problem type. When this member is not present, its value is assumed to be "about:blank". - `title` (string) Short, human-readable summary of the problem type. Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem. - `detail` (string) Human-readable explanation that is specific to this occurrence of the problem. - `instance` (string) URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. ## Response 403 fields (application/json): - `status` (integer) HTTP status code. - `type` (string) Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference. It should provide human-readable documentation for the problem type. When this member is not present, its value is assumed to be "about:blank". - `title` (string) Short, human-readable summary of the problem type. Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem. - `detail` (string) Human-readable explanation that is specific to this occurrence of the problem. - `instance` (string) URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. ## Response 422 fields (application/json): - `status` (integer) HTTP status code. - `type` (string) Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference. It should provide human-readable documentation for the problem type. When this member is not present, its value is assumed to be "about:blank". - `title` (string) Short, human-readable summary of the problem type. Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem. - `detail` (string) Human-readable explanation that is specific to this occurrence of the problem. - `instance` (string) URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. - `invalidFields` (array) Invalid field details. Example: [{"field":"field1","message":"field1 is invalid"},{"field":"subObject.field2","message":"field2 is invalid"},{"field":"subObject.field2","message":"another error in the field2"}] - `invalidFields.field` (string) Name of the field. Dot notation is used for nested object field names. - `invalidFields.message` (string) Message field. ## Response 429 fields (application/json): - `type` (string) Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference. It should provide human-readable documentation for the problem type. When this member is not present, its value is assumed to be "about:blank". Example: "about:blank" - `title` (string) Short, human-readable summary of the problem type. Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem. Example: "Rate Limit Exceeded" - `status` (integer) HTTP status code. - `detail` (string) Human-readable explanation that is specific to this occurrence of the problem. Example: "A request cannot be executed because the user has sent too many requests within a certain period of time" - `instance` (string) URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced.