> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.latitude.xyz/api-reference/individuals/post-v-1-individuals-id-verification-token/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.latitude.xyz/_mcp/server. # Submit Verification Token POST https://api.latitude.xyz/v1/individuals/{id}/verification_token Content-Type: application/json Submits a verification token for an individual Reference: https://docs.latitude.xyz/api-reference/individuals/post-v-1-individuals-id-verification-token ## Request ### Path parameters - `id` (string, required) ### Body (application/json) This endpoint expects a postV1IndividualsIdVerificationToken. - `provider` (enum, required) — Identity verification provider that issued the token - Allowed values: `sumsub` - `token` (string, required) — Sumsub share token for the individual - `applicant_id` (string, required) — The individual's applicant id at the provider - `partner_terms_accepted_at` (string, required) — ISO8601 when the individual accepted the partner's terms ## Response ### 202 Submit Verification Token - `id` (string, required) — Unique public identifier for the individual - `given_name` (string, required) — Individual's given name - `family_name` (string, required) — Individual's family name - `email` (string, required) — Individual's email address - `phone` (string, required) — Individual's phone number - `date_of_birth` (string, required) — Date of birth (YYYY-MM-DD) - `idv_consent_recorded_at` (string, required) — ISO8601 timestamp when IDV consent was recorded (on_ramp / off_ramp) - `address` (API_V1_Serializers_Address, required) — Address information for the individual - `country` (enum, required) — Country code (e.g., MX, US) - Allowed values: `AR`, `BR`, `CO`, `MX`, `US`, `IN`, `PH`, `SG`, `VN`, `AE`, `GB`, `AT`, `BE`, `BG`, `CY`, `DE`, `EE`, `ES`, `FI`, `FR`, `GR`, `HR`, `IE`, `IT`, `LT`, `LU`, `LV`, `MT`, `NL`, `PT`, `SI`, `SK`, `CZ`, `DK`, `HU`, `PL`, `RO`, `SE`, `CH`, `IS`, `LI`, `NO` - `status` (enum, required) — Current IDV status of the individual - Allowed values: `active`, `pending`, `under_review`, `rejected`, `action_required` - `product_types` (list of enum, required) — Product types for the individual - Allowed values: `global_payouts`, `off_ramp`, `on_ramp` - `financial_accounts` (list of API_V1_Serializers_FinancialAccount, required) — Financial accounts for the individual - `created_at` (string, required) — ISO 8601 timestamp when the individual was created - `updated_at` (string, required) — ISO 8601 timestamp when the individual was last updated - `document` (API_V1_Serializers_Document, optional) — Document information for identity verification - `status_details` (list of API_V1_Serializers_StatusDetail, optional) — Detail codes and messages explaining the current status ## Errors ### 400 Bad Request Error Validation error: missing or unsupported provider, missing or blank token, token longer than 4096 characters, missing applicant_id, partner_terms_accepted_at not an ISO8601 timestamp, or an individual who verifies with images - `any` ### 404 Not Found Error Individual not found - `any` ### 422 Unprocessable Entity Error Individual not in action_required status, or verification tokens are not available yet - `any` ## Types ### API_V1_Serializers_Address - `country` (enum, required) — Country code - Allowed values: `AR`, `BR`, `CO`, `MX`, `US`, `IN`, `PH`, `SG`, `VN`, `AE`, `GB`, `AT`, `BE`, `BG`, `CY`, `DE`, `EE`, `ES`, `FI`, `FR`, `GR`, `HR`, `IE`, `IT`, `LT`, `LU`, `LV`, `MT`, `NL`, `PT`, `SI`, `SK`, `CZ`, `DK`, `HU`, `PL`, `RO`, `SE`, `CH`, `IS`, `LI`, `NO` - `line_1` (string, optional) — Address line 1 - `line_2` (string, optional) — Address line 2 - `city` (string, optional) — City - `state` (string, optional) — State - `postal_code` (string, optional) — Postal code ### API_V1_Serializers_FinancialAccount API_V1_Serializers_FinancialAccount model - `id` (string, required) — Unique public identifier for the financial account - `type` (enum, required) — Type of financial account - Allowed values: `pix`, `bank_account`, `digital_wallet`, `upi`, `crypto_wallet`, `ph_qr_code` - `details` (ApiV1SerializersFinancialAccountDetails, required) — Account-specific details - `created_at` (string, required) — ISO 8601 timestamp when the account was created - `updated_at` (string, required) — ISO 8601 timestamp when the account was last updated ### API_V1_Serializers_Document - `type` (enum, required) — Document type - Allowed values: `cuit`, `cuil`, `cpf`, `cnpj`, `cc`, `ce`, `nit`, `pep`, `curp`, `tin`, `eu_residence_permit`, `emirates_id`, `driver_licence`, `national_id`, `passport` - `number` (string, optional) — Document number (when available) ### API_V1_Serializers_StatusDetail - `code` (enum, required) — Status detail code - Allowed values: `verification_front_image_needed`, `verification_back_image_needed`, `verification_selfie_needed`, `verification_token_needed`, `verification_image_blurry`, `verification_image_glare`, `verification_portrait_unclear`, `verification_portrait_missing`, `verification_document_not_detected`, `verification_image_unprocessable`, `verification_document_damaged`, `verification_document_expired`, `verification_unsupported_document_type`, `verification_country_not_determined`, `verification_electronic_replica`, `verification_attribute_mismatch`, `verification_disallowed_country`, `verification_age_mismatch`, `verification_identity_unverified`, `verification_unknown_error` - `message` (string, required) — Human-readable message for the detail code ### ApiV1SerializersFinancialAccountDetails Account-specific details ## Examples **Request** ```json { "provider": "sumsub", "token": "string", "applicant_id": "string", "partner_terms_accepted_at": "string" } ``` **Response** ```json { "id": "string", "given_name": "string", "family_name": "string", "email": "string", "phone": "string", "date_of_birth": "string", "idv_consent_recorded_at": "string", "address": { "country": "AR", "line_1": "string", "line_2": "string", "city": "string", "state": "string", "postal_code": "string" }, "country": "AR", "status": "active", "product_types": [ "global_payouts" ], "financial_accounts": [ { "id": "string", "type": "pix", "details": {}, "created_at": "2024-01-15T09:30:00Z", "updated_at": "2024-01-15T09:30:00Z" } ], "created_at": "string", "updated_at": "string", "document": { "type": "cuit", "number": "string" }, "status_details": [ { "code": "verification_front_image_needed", "message": "string" } ] } ``` **SDK Code** ```python import requests url = "https://api.latitude.xyz/v1/individuals/id/verification_token" payload = { "provider": "sumsub", "token": "string", "applicant_id": "string", "partner_terms_accepted_at": "string" } headers = {"Content-Type": "application/json"} response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` ```javascript const url = 'https://api.latitude.xyz/v1/individuals/id/verification_token'; const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"provider":"sumsub","token":"string","applicant_id":"string","partner_terms_accepted_at":"string"}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://api.latitude.xyz/v1/individuals/id/verification_token" payload := strings.NewReader("{\n \"provider\": \"sumsub\",\n \"token\": \"string\",\n \"applicant_id\": \"string\",\n \"partner_terms_accepted_at\": \"string\"\n}") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://api.latitude.xyz/v1/individuals/id/verification_token") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["Content-Type"] = 'application/json' request.body = "{\n \"provider\": \"sumsub\",\n \"token\": \"string\",\n \"applicant_id\": \"string\",\n \"partner_terms_accepted_at\": \"string\"\n}" response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://api.latitude.xyz/v1/individuals/id/verification_token") .header("Content-Type", "application/json") .body("{\n \"provider\": \"sumsub\",\n \"token\": \"string\",\n \"applicant_id\": \"string\",\n \"partner_terms_accepted_at\": \"string\"\n}") .asString(); ``` ```php request('POST', 'https://api.latitude.xyz/v1/individuals/id/verification_token', [ 'body' => '{ "provider": "sumsub", "token": "string", "applicant_id": "string", "partner_terms_accepted_at": "string" }', 'headers' => [ 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://api.latitude.xyz/v1/individuals/id/verification_token"); var request = new RestRequest(Method.POST); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\n \"provider\": \"sumsub\",\n \"token\": \"string\",\n \"applicant_id\": \"string\",\n \"partner_terms_accepted_at\": \"string\"\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = ["Content-Type": "application/json"] let parameters = [ "provider": "sumsub", "token": "string", "applicant_id": "string", "partner_terms_accepted_at": "string" ] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://api.latitude.xyz/v1/individuals/id/verification_token")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```