> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.cable.tech/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.cable.tech/_mcp/server.

# Add identity verification

POST https://api.cable.tech/v2/identity_verification
Content-Type: application/json

Add IDV (Identity Verification) information for a person or company.

Note: Each API call represents a single verification event from one provider at a specific point in time. If you have multiple verification sources or multiple verification attempts, you must make separate API calls for each one.

For example:
- Document verification from Provider A requires one API call
- Database verification from Provider B requires another API call
- Re-verification after data update requires a new API call

Reference: https://docs.cable.tech/api-documentation/api-reference/identity-verification/add-identity-verification

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Body (application/json)

This endpoint expects a list of IdentityVerification.

- `list of IdentityVerification`

## Response

### 201

Identity verification added successfully

- `success` (boolean, required) — Indicates if the write operation was successful.
- `write_count` (integer, required) — The number of records written to the database.
- `message` (string, required) — Provides additional information about the operation result.
- `organization_id` (string, required) — The organization ID for which the operation was performed.

## Errors

### 400 Bad Request Error

Invalid Identity verification data

- `code` (integer, required)
- `message` (string, required)
- `errors` (list of GeneralErrorErrorsItems, optional) — Detailed information about errors in specific fields.

### 401 Unauthorized Error

Unauthorized request

- `code` (integer, required)
- `message` (string, required)
- `errors` (list of GeneralErrorErrorsItems, optional) — Detailed information about errors in specific fields.

### 409 Conflict Error

Identity verification already exists

- `code` (integer, required)
- `message` (string, required)
- `errors` (list of GeneralErrorErrorsItems, optional) — Detailed information about errors in specific fields.

### 429 Too Many Requests Error

Rate limit exceeded

- `code` (integer, required)
- `message` (string, required)
- `errors` (list of GeneralErrorErrorsItems, optional) — Detailed information about errors in specific fields.

### 500 Internal Server Error

Server error

- `code` (integer, required)
- `message` (string, required)
- `errors` (list of GeneralErrorErrorsItems, optional) — Detailed information about errors in specific fields.

## Types

### IdentityVerification

Request body for adding IDV (Identity Verification) information for a person or company. Note: Each API call represents a single verification event from one provider at a specific point in time. If you have multiple verification sources or multiple verification attempts, you must make separate API calls for each one. For example: - Document verification from Provider A requires one API call - Database verification from Provider B requires another API call - Re-verification after data update requires a new API call

- `verification_id` (string, required) — Unique identifier for an identity verification. This is the primary identifier for an identity verification and should be unique across all identity verifications. Updates to an identity verification should be made using this identifier. This can reference: - Your internal verification record ID - The original provider's verification ID (optionally with a prefix) - Any unique identifier that allows traceability to the original data source
- `timestamp` (datetime, required) — When the identity verification completed, in ISO 8601 format. Use the timestamp from your verification provider's response.
- `verification_provider` (string, required) — Which verification provider verified those attributes for the person or company. If this is an internal process, mention the name of your company.
- `verified_data` (list of IdentityVerificationVerifiedDataItems, required) — Array of individual data points verified in this verification event only. Each item represents a specific piece of information (name, DOB, address, etc.) that was checked during this particular verification. Do not include: - Data points from other verification events - Aggregated results from multiple verifications - Data that wasn't actually verified in this specific check Example: If this verification only checked name and DOB, only include those two items in the array, even if other data points were verified in previous or separate verification events.
- `related_company_id` (string, optional) — Unique identifier of the related company entity (used for business contexts). Only one of related_company_id and related_person_id can be specified.
- `related_person_id` (string, optional) — Unique identifier of the related person entity (used for retail contexts or when a person is the subject). Only one of related_company_id and related_person_id can be specified.
- `verification_overall_outcome` (string, optional) — Result of IDV screening returned from provider
- `verification_type` (enum, optional)
  - Allowed values: `DOCUMENT_MATCH`, `DATABASE_MATCH`, `MANUAL_VERIFICATION`

### GeneralErrorErrorsItems

- `field` (string, optional)
- `message` (string, optional)

### IdentityVerificationVerifiedDataItems

- `type` (string, required) — The type of data being verified for the person or company
- `outcome` (string, required) — The result of the verification for this data being verified
- `value` (string, optional) — The actual data that was verified, such as a name or ID number.
- `is_matched_externally` (boolean, optional) — Specifies whether the data was verified by comparing it with an external source, such as a third-party verification provider, external database, or through documentary verification (e.g., matching documents against regulatory standards).
- `is_manually_verified` (boolean, optional) — Indicates whether the data was manually verified by an internal team or trusted individual. This is true when the verification process involves human intervention rather than an automated system, for example when verifying a document.

## Examples

**Request**

```json
[
  {
    "verification_id": "verif-20240615-7890",
    "timestamp": "2024-06-15T14:45:00Z",
    "verification_provider": [
      "Socure"
    ],
    "verified_data": [
      {
        "type": [
          "name",
          "dob",
          "document",
          "id_number"
        ],
        "outcome": "pass"
      }
    ]
  }
]
```

**Response**

```json
{
  "success": true,
  "write_count": 1,
  "message": "Identity verification record created successfully.",
  "organization_id": "org-1234567890"
}
```

**SDK Code**

```python
import requests

url = "https://api.cable.tech/v2/identity_verification"

payload = [
    {
        "verification_id": "verif-20240615-7890",
        "timestamp": "2024-06-15T14:45:00Z",
        "verification_provider": ["Socure"],
        "verified_data": [
            {
                "type": ["name", "dob", "document", "id_number"],
                "outcome": "pass"
            }
        ]
    }
]
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.cable.tech/v2/identity_verification';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '[{"verification_id":"verif-20240615-7890","timestamp":"2024-06-15T14:45:00Z","verification_provider":["Socure"],"verified_data":[{"type":["name","dob","document","id_number"],"outcome":"pass"}]}]'
};

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.cable.tech/v2/identity_verification"

	payload := strings.NewReader("[\n  {\n    \"verification_id\": \"verif-20240615-7890\",\n    \"timestamp\": \"2024-06-15T14:45:00Z\",\n    \"verification_provider\": [\n      \"Socure\"\n    ],\n    \"verified_data\": [\n      {\n        \"type\": [\n          \"name\",\n          \"dob\",\n          \"document\",\n          \"id_number\"\n        ],\n        \"outcome\": \"pass\"\n      }\n    ]\n  }\n]")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	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.cable.tech/v2/identity_verification")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n  {\n    \"verification_id\": \"verif-20240615-7890\",\n    \"timestamp\": \"2024-06-15T14:45:00Z\",\n    \"verification_provider\": [\n      \"Socure\"\n    ],\n    \"verified_data\": [\n      {\n        \"type\": [\n          \"name\",\n          \"dob\",\n          \"document\",\n          \"id_number\"\n        ],\n        \"outcome\": \"pass\"\n      }\n    ]\n  }\n]"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.cable.tech/v2/identity_verification")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("[\n  {\n    \"verification_id\": \"verif-20240615-7890\",\n    \"timestamp\": \"2024-06-15T14:45:00Z\",\n    \"verification_provider\": [\n      \"Socure\"\n    ],\n    \"verified_data\": [\n      {\n        \"type\": [\n          \"name\",\n          \"dob\",\n          \"document\",\n          \"id_number\"\n        ],\n        \"outcome\": \"pass\"\n      }\n    ]\n  }\n]")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.cable.tech/v2/identity_verification', [
  'body' => '[
  {
    "verification_id": "verif-20240615-7890",
    "timestamp": "2024-06-15T14:45:00Z",
    "verification_provider": [
      "Socure"
    ],
    "verified_data": [
      {
        "type": [
          "name",
          "dob",
          "document",
          "id_number"
        ],
        "outcome": "pass"
      }
    ]
  }
]',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.cable.tech/v2/identity_verification");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "[\n  {\n    \"verification_id\": \"verif-20240615-7890\",\n    \"timestamp\": \"2024-06-15T14:45:00Z\",\n    \"verification_provider\": [\n      \"Socure\"\n    ],\n    \"verified_data\": [\n      {\n        \"type\": [\n          \"name\",\n          \"dob\",\n          \"document\",\n          \"id_number\"\n        ],\n        \"outcome\": \"pass\"\n      }\n    ]\n  }\n]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  [
    "verification_id": "verif-20240615-7890",
    "timestamp": "2024-06-15T14:45:00Z",
    "verification_provider": ["Socure"],
    "verified_data": [
      [
        "type": ["name", "dob", "document", "id_number"],
        "outcome": "pass"
      ]
    ]
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.cable.tech/v2/identity_verification")! 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()
```