# Create a new device binding This endpoint initiates the device binding process for registering a device for a customer. When the request is processed, Solaris sends an SMS OTP to the customer's registered mobile number. Before you can use this endpoint, your customer must have a verified mobile number. Endpoint: POST /v1/mfa/devices Version: 1.0 ## Request fields (application/json): - `person_id` (string) ID of the person for whom the device should be registered. Example: "ec3d16cbc106f481b72d881d90c89cc5cper" - `key_type` (string) The type of key pair used for verifying the device and, after registration, for device signing. At this time, only is supported. Enum: "ecdsa-p256" - `challenge_type` (string) (Optional) The type of challenge to use in order to verify the device. Default value is . - `key` (string) The hex-encoded public key generated by the device to be registered. Example: "04a346c447bac867d15a0a0f555eece87b416ba6f917df1e39f1cba7515757b4da9eaf5f1604f7e47f1948af3b34ed2735aa565cfd97d5361e12b3b8603bdad73c" - `key_purpose` (string) The purpose of the key that will be used to sign for the device. Possible values are (default) and . Enum: "unrestricted", "restricted" - `name` (string) Specify a name for the new device. Example: "Test device" - `sms_challenge` (object) (For SMS challenges) Specifies additional info for processing the SMS challenge. - `sms_challenge.app_signature` (string) The app signature to use with the Google SMS API for automatic SMS processing inside your app. Enum: "e2e-e2e-e2e" - `language` (string) The language to use in the SMS challenge. Options are: , , . Enum: "de", "en", "fr" - `device_data` (string) Base64 encoded device data as provided by Seon SDK. Details of Seon SDK integration can be found in the [device monitoring guide](https://docs.solarisgroup.com/guides/kyc/device-monitoring/). Example: "Web;179ac83968ab42f79e960c1753a4078fdcon;jVl14emA+OcyALb9F+CMFg==;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" ## Response 202 fields (application/json): - `id` (string) The ID of the device. Example: "6642d15e-8f6b-4d28-9186-cdd61d80032a" - `key_id` (string) The ID of the default key that was registered for the device. Example: "3e1415b8-901d-4c1a-8950-f3a1083c6c3b" - `challenge` (object) Signature challenge - `challenge.id` (string) The ID of the challenge. Example: "6642d15e-8f6b-4d28-9186-cdd61d80032a" - `challenge.type` (string) The type of the challenge. Example: "signature" - `challenge.created_at` (string) The date and time when the challenge was created. Example: "2022-03-18T14:50:04Z" - `challenge.expires_at` (string) The date and time when the challenge will expire (i.e., 5 minutes after creation). Example: "2022-03-18T14:55:04Z" ## Response 400 fields (application/json): - `title` (string) Example: "Failed to build pagination headers." - `status` (integer) Example: "400" - `id` (string) Example: "a95f2aaf-4e0c-4d49-8021-8a16a884ed86" - `detail` (string) Example: "Cannot connect to database." - `code` (string) Example: "build_pagination_headers_failure" - `error_code` (string) a static error_code that can be used to identify the error Example: "telephone_number_not_found" ## Response 401 fields (application/json): - `errors` (array) - `errors.status` (integer) - `errors.source` (object) - `errors.source.field` (string) - `errors.source.message` (string) - `errors.code` (string) - `errors.title` (string) - `errors.detail` (string) - `errors.id` (string) Correlation/Request ID ## Response 403 fields (application/json): - `title` (string) Example: "Unauthorized Action" - `status` (integer) Example: "403" - `id` (string) Example: "a95f2aaf-4e0c-4d49-8021-8a16a884ed86" - `detail` (string) Example: "Unauthorized action is not allowed." - `code` (string) Example: "unauthorized_action" - `error_code` (string) a static error_code that can be used to identify the error Example: "forbidden" ## Response 404 fields (application/json): - `title` (string) Example: "Model Not Found" - `status` (integer) Example: "404" - `id` (string) Example: "a95f2aaf-4e0c-4d49-8021-8a16a884ed86" - `detail` (string) Example: "Couldn't find 'Account' for id 'DE24112233445566'." - `code` (string) Example: "model_not_found" - `error_code` (string) a static error_code that can be used to identify the error Example: "not_found" ## Response 409 fields (application/json): - `errors` (array) - `errors.status` (integer) - `errors.source` (object) - `errors.source.field` (string) - `errors.source.message` (string) - `errors.code` (string) - `errors.title` (string) - `errors.detail` (string) - `errors.id` (string) Correlation/Request ID ## Response 500 fields (application/json): - `id` (string) Example: "e8915041-9d8c-4d96-9dd1-04e8522ecdbf" - `status` (integer) Example: "500" - `code` (string) Example: "generic_error" - `title` (string) Example: "Generic Error" - `detail` (string) Example: "There was an error." - `error_code` (string) a static error_code that can be used to identify the error Example: "generic_error"