# REST API

Use this documentation to verify your users, detect liveness, and integrate into your UI/UX via a REST API. Although we recommend using the SDKs, we know that some systems may be better suited for the REST API, so we got you covered.

## How to use the Rest API

#### 1) Onboarding new customers

Andia stores the Biometrics Vectors from a video selfie (dynamic validation) or a picture selfie (static validation) that is taken during on-boarding process. This method returns a unique user identifier (**user\_id**), with which one-to-one validations will be carried out later.

**2) Dynamic Validations (Liveness Detection)**

Verify a user is alive by validating that the user has blinked on video against the existing **user\_id**.

#### 3) Static Validations (no Liveness Detection)

Verify if a Selfie taken corresponds to an existing **user\_id (a** user who has previously been onboarde&#x64;**)**.

## Dynamic Validations (Liveness validation) endpoints

## Register new customer&#x20;

<mark style="color:green;">`POST`</mark> `https://api.andia.io/v1/register_new_customer_video`

This endpoint generates the Biometric vectors from new users using a short selfie video (1 to 3 seconds long) and returns a unique **user\_id**.&#x20;

#### Headers

| Name           | Type   | Description      |
| -------------- | ------ | ---------------- |
| Content-Type   | string | application/json |
| Authentication | string | Your API\_KEY    |

#### Request Body

| Name    | Type   | Description                                                                                                                                                                                              |
| ------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| video64 | string | <p>Base64 string (converted from mp4 format <br>to Base64) \*\*\*The video must include a user blink.</p>                                                                                                |
| video   | object | <p>Selfie video file (<strong>mp4 format</strong>) <br><strong>Recommended size less than 2 Mb</strong><br><strong>Important</strong><br>\*\*\*<strong>The video must include a user blink.</strong></p> |

{% tabs %}
{% tab title="200 " %}

```
{
    "success": true,
    "error_code": 0,
    "error": "",
    "message": "success",
    "user_id": "fb61986b-8208-4b9b-b4d5-49eb1178cdcd"
}
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Node.js" %}

```javascript
var request = require('request');

request({
  method: 'POST',
  url: 'https://api.andia.io/v1/register_new_customer_video',
  headers: {
    'Content-Type': 'multipart/form-data;boundary={boundary value}',
    'Authentication': 'Your API_KEY'
  },
  body: "--{boundary value}
Content-Disposition: form-data; name="video"; 
video
--{boundary value}--"
}, function (error, response, body) {
  console.log('Status:', response.statusCode);
  console.log('Headers:', JSON.stringify(response.headers));
  console.log('Response:', body);
});
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://api.andia.io/v1/register_new_customer_video");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, --{boundary value}
Content-Disposition: form-data; name="video"; 
video
--{boundary value}--);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: multipart/form-data;boundary={boundary value}",
  "Authentication: Your API_KEY"
));

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
```

{% endtab %}

{% tab title="Java" %}

```java
// Maven : Add these dependecies to your pom.xml (java6+)
// <dependency>
//     <groupId>org.glassfish.jersey.core</groupId>
//     <artifactId>jersey-client</artifactId>
//     <version>2.8</version>
// </dependency>
// <dependency>
//     <groupId>org.glassfish.jersey.media</groupId>
//     <artifactId>jersey-media-json-jackson</artifactId>
//     <version>2.8</version>
// </dependency>

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Entity<String> payload = Entity.text("--{boundary value}
Content-Disposition: form-data; name="video"; 
video
--{boundary value}--");
Response response = client.target("https://api.andia.io/v1/register_new_customer_video")
  .request(MediaType.TEXT_PLAIN_TYPE)
  .header("Authentication", "Your API_KEY")
  .post(payload);

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));
```

{% endtab %}

{% tab title="ASP.NET (C#)" %}

```csharp
//Common testing requirement. If you are consuming an API in a sandbox/test region, uncomment this line of code ONLY for non production uses.
//System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

//Be sure to run "Install-Package Microsoft.Net.Http" from your nuget command line.
using System;
using System.Net.Http;

var baseAddress = new Uri("https://api.andia.io/v1/");

using (var httpClient = new HttpClient{ BaseAddress = baseAddress })
{

  
  httpClient.DefaultRequestHeaders.TryAddWithoutValidation("authentication", "Your API_KEY");
  
    using (var content = new StringContent("--{boundary value}
Content-Disposition: form-data; name="video"; 
video
--{boundary value}--", System.Text.Encoding.Default, "multipart/form-data;boundary={boundary value}"))
    {
      using (var response = await httpClient.PostAsync("register_new_customer_video", content))
      {
        string responseData = await response.Content.ReadAsStringAsync();
      }
  }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'rubygems' if RUBY_VERSION < '1.9'
require 'rest_client'

values = --{boundary value}
Content-Disposition: form-data; name="video"; 
video
--{boundary value}--

headers = {
  :content_type => 'multipart/form-data;boundary={boundary value}',
  :authentication => 'Your API_KEY'
}

response = RestClient.post 'https://api.andia.io/v1/register_new_customer_video', values, headers
puts response
```

{% endtab %}

{% tab title="Python" %}

```python
from urllib2 import Request, urlopen

values = """
--{boundary value}
Content-Disposition: form-data; name="video"; 
video
--{boundary value}--"""

headers = {
  'Content-Type': 'multipart/form-data;boundary={boundary value}',
  'Authentication': 'Your API_KEY'
}
request = Request('https://api.andia.io/v1/register_new_customer_video', data=values, headers=headers)

response_body = urlopen(request).read()
print response_body
```

{% endtab %}
{% endtabs %}

## Validation

<mark style="color:green;">`POST`</mark> `https://api.andia.io/v1/validate_transaction_video`

This endpoint compare an existing **user\_id** against a short selfie video (1 to 3 seconds long).

#### Headers

| Name           | Type   | Description      |
| -------------- | ------ | ---------------- |
| Content-Type   | string | application/json |
| Authentication | string | Your API\_KEY    |

#### Request Body

| Name     | Type   | Description                                                                                                                                                                           |
| -------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| video64  | string | <p>Base64 string (converted from mp4 format <br>to Base64) \*\*\*The video must include a user blink</p>                                                                              |
| user\_id | string | An existing user identifier                                                                                                                                                           |
| video    | object | <p>Selfie video file (<strong>mp4 format</strong>) <br><strong>Recommended size less than 2 Mb. Important</strong><br><strong>\*\*\*The video must include a user blink.</strong></p> |

{% tabs %}
{% tab title="200 " %}

```
{
    "success": true,
    "error_code": 0,
    "error": "",
    "message": "It is a Match"
}
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Node.js" %}

```javascript
var request = require('request');

request({
  method: 'POST',
  url: 'https://api.andia.io/v1/validate_transaction_video',
  headers: {
    'Content-Type': 'multipart/form-data;boundary={boundary value}',
    'Authentication': 'Your API_KEY',
    'Content-Disposition': 'form-data;''
  },
  body: "--{boundary value}
Content-Disposition: form-data; name="user_id";
user_id

--{boundary value}
Content-Disposition: form-data; name="video"; 
video
--{boundary value}--"
}, function (error, response, body) {
  console.log('Status:', response.statusCode);
  console.log('Headers:', JSON.stringify(response.headers));
  console.log('Response:', body);
});
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://api.andia.io/v1/validate_transaction_video");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, --{boundary value}
Content-Disposition: form-data; name="user_id";
user_id

--{boundary value}
Content-Disposition: form-data; name="video"; 
video
--{boundary value}--);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: multipart/form-data;boundary={boundary value}",
  "Authentication: Your API_KEY",
  "Content-Disposition: form-data;""
));

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
```

{% endtab %}

{% tab title="Java" %}

```java
// Maven : Add these dependecies to your pom.xml (java6+)
// <dependency>
//     <groupId>org.glassfish.jersey.core</groupId>
//     <artifactId>jersey-client</artifactId>
//     <version>2.8</version>
// </dependency>
// <dependency>
//     <groupId>org.glassfish.jersey.media</groupId>
//     <artifactId>jersey-media-json-jackson</artifactId>
//     <version>2.8</version>
// </dependency>

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Entity<String> payload = Entity.text("--{boundary value}
Content-Disposition: form-data; name="user_id";
user_id

--{boundary value}
Content-Disposition: form-data; name="video"; 
video
--{boundary value}--");
Response response = client.target("https://api.andia.io/v1/validate_transaction_video")
  .request(MediaType.TEXT_PLAIN_TYPE)
  .header("Authentication", "Your API_KEY")
  .header("Content-Disposition", "form-data;"")
  .post(payload);

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));
```

{% endtab %}

{% tab title="ASP.NET (C#)" %}

```csharp
//Common testing requirement. If you are consuming an API in a sandbox/test region, uncomment this line of code ONLY for non production uses.
//System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

//Be sure to run "Install-Package Microsoft.Net.Http" from your nuget command line.
using System;
using System.Net.Http;

var baseAddress = new Uri("https://api.andia.io/v1/");

using (var httpClient = new HttpClient{ BaseAddress = baseAddress })
{

  
  httpClient.DefaultRequestHeaders.TryAddWithoutValidation("authentication", "Your API_KEY");
  
  httpClient.DefaultRequestHeaders.TryAddWithoutValidation("content-disposition", "form-data;"");
  
    using (var content = new StringContent("--{boundary value}
Content-Disposition: form-data; name="user_id";
user_id

--{boundary value}
Content-Disposition: form-data; name="video"; 
video
--{boundary value}--", System.Text.Encoding.Default, "multipart/form-data;boundary={boundary value}"))
    {
      using (var response = await httpClient.PostAsync("validate_transaction_video", content))
      {
        string responseData = await response.Content.ReadAsStringAsync();
      }
  }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'rubygems' if RUBY_VERSION < '1.9'
require 'rest_client'

values = --{boundary value}
Content-Disposition: form-data; name="user_id";
user_id

--{boundary value}
Content-Disposition: form-data; name="video"; 
video
--{boundary value}--

headers = {
  :content_type => 'multipart/form-data;boundary={boundary value}',
  :authentication => 'Your API_KEY',
  :content_disposition => 'form-data;"'
}

response = RestClient.post 'https://api.andia.io/v1/validate_transaction_video', values, headers
puts response
```

{% endtab %}

{% tab title="Python" %}

```python
from urllib2 import Request, urlopen

values = """
--{boundary value}
Content-Disposition: form-data; name="user_id";
user_id

--{boundary value}
Content-Disposition: form-data; name="video"; 
video
--{boundary value}--"""

headers = {
  'Content-Type': 'multipart/form-data;boundary={boundary value}',
  'Authentication': 'Your API_KEY',
  'Content-Disposition': 'form-data;''
}
request = Request('https://api.andia.io/v1/validate_transaction_video', data=values, headers=headers)

response_body = urlopen(request).read()
print response_body
```

{% endtab %}
{% endtabs %}

## Static methods (No Liveness detection) in case of existing user images

## Register new customer

<mark style="color:green;">`POST`</mark> `https://api.andia.io/v1/register_new_customer`

This endpoint stores the Biometric vectors from new users and generate a unique user\_id.

#### Headers

| Name           | Type   | Description      |
| -------------- | ------ | ---------------- |
| Content-Type   | string | application/json |
| Authentication | string | Your API\_KEY    |

#### Request Body

| Name     | Type   | Description                                                                                             |
| -------- | ------ | ------------------------------------------------------------------------------------------------------- |
| selfie   | object | <p>Selfie image file (jpg format) <br>Recommended size less than 512 Kb</p>                             |
| selfie64 | string | <p>Base 64 jpg Image (Required if selfie file is not provided)<br>Recommended size less than 512 Kb</p> |

{% tabs %}
{% tab title="200 " %}

```javascript
{
    "success": true,
    "error_code": 0,
    "error": "",
    "message": "success",
    "user_id": "fb61986b-8208-4b9b-b4d5-49eb1178cdcd"
}
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Node.js" %}

```javascript
var request = require('request');

request({
  method: 'POST',
  url: 'https://api.andia.io/v1/register_new_customer',
  headers: {
    'Content-Type': 'multipart/form-data;boundary={boundary value}',
    'Authentication': 'Your API_KEY',
    'Content-Disposition': 'form-data;''
  },
  body: "--{boundary value}
Content-Disposition: form-data; name="selfie"; 
selfie
--{boundary value}--"
}, function (error, response, body) {
  console.log('Status:', response.statusCode);
  console.log('Headers:', JSON.stringify(response.headers));
  console.log('Response:', body);
});
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://api.andia.io/v1/register_new_customer");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, --{boundary value}
Content-Disposition: form-data; name="selfie"; 
selfie
--{boundary value}--);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: multipart/form-data;boundary={boundary value}",
  "Authentication: Your API_KEY",
  "Content-Disposition: form-data;""
));

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
```

{% endtab %}

{% tab title="Java" %}

```java
// Maven : Add these dependecies to your pom.xml (java6+)
// <dependency>
//     <groupId>org.glassfish.jersey.core</groupId>
//     <artifactId>jersey-client</artifactId>
//     <version>2.8</version>
// </dependency>
// <dependency>
//     <groupId>org.glassfish.jersey.media</groupId>
//     <artifactId>jersey-media-json-jackson</artifactId>
//     <version>2.8</version>
// </dependency>

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Entity<String> payload = Entity.text("--{boundary value}
Content-Disposition: form-data; name="selfie"; 
selfie
--{boundary value}--");
Response response = client.target("https://api.andia.io/v1/register_new_customer")
  .request(MediaType.TEXT_PLAIN_TYPE)
  .header("Authentication", "Your API_KEY")
  .header("Content-Disposition", "form-data;"")
  .post(payload);

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));
```

{% endtab %}

{% tab title="ASP.NET (C#)" %}

```csharp
//Common testing requirement. If you are consuming an API in a sandbox/test region, uncomment this line of code ONLY for non production uses.
//System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

//Be sure to run "Install-Package Microsoft.Net.Http" from your nuget command line.
using System;
using System.Net.Http;

var baseAddress = new Uri("https://api.andia.io/v1/");

using (var httpClient = new HttpClient{ BaseAddress = baseAddress })
{

  
  httpClient.DefaultRequestHeaders.TryAddWithoutValidation("authentication", "Your API_KEY");
  
  httpClient.DefaultRequestHeaders.TryAddWithoutValidation("content-disposition", "form-data;"");
  
    using (var content = new StringContent("--{boundary value}
Content-Disposition: form-data; name="selfie"; 
selfie
--{boundary value}--", System.Text.Encoding.Default, "multipart/form-data;boundary={boundary value}"))
    {
      using (var response = await httpClient.PostAsync("register_new_customer", content))
      {
        string responseData = await response.Content.ReadAsStringAsync();
      }
  }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'rubygems' if RUBY_VERSION < '1.9'
require 'rest_client'

values = --{boundary value}
Content-Disposition: form-data; name="selfie"; 
selfie
--{boundary value}--

headers = {
  :content_type => 'multipart/form-data;boundary={boundary value}',
  :authentication => 'Your API_KEY',
  :content_disposition => 'form-data;"'
}

response = RestClient.post 'https://api.andia.io/v1/register_new_customer', values, headers
puts response
```

{% endtab %}

{% tab title="Python" %}

```python
from urllib2 import Request, urlopen

values = """
--{boundary value}
Content-Disposition: form-data; name="selfie"; 
selfie
--{boundary value}--"""

headers = {
  'Content-Type': 'multipart/form-data;boundary={boundary value}',
  'Authentication': 'Your API_KEY',
  'Content-Disposition': 'form-data;''
}
request = Request('https://api.andia.io/v1/register_new_customer', data=values, headers=headers)

response_body = urlopen(request).read()
print response_body
```

{% endtab %}
{% endtabs %}

## Validation

<mark style="color:green;">`POST`</mark> `https://api.andia.io/v1/validate_transaction`

This endpoint compare an existing **user\_id** against a Selfie.

#### Headers

| Name           | Type   | Description      |
| -------------- | ------ | ---------------- |
| Content-Type   | string | application/json |
| Authentication | string | Your API\_KEY    |

#### Request Body

| Name     | Type   | Description                                                                                              |
| -------- | ------ | -------------------------------------------------------------------------------------------------------- |
| selfie64 | string | <p>Base 64 JPG Image<br>Required if selfie file is not provided<br>Recommended size less than 512 Kb</p> |
| user\_id | string | An existing user identifier                                                                              |
| selfie   | object | <p>Selfie image file (jpg format) <br>Recommended size less than 512 Kb</p>                              |

{% tabs %}
{% tab title="200 Cake successfully retrieved." %}

```javascript
{
    "success": true,
    "error_code": 0,
    "error": "",
    "message": "It is a Match"
}
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Node.js" %}

```javascript
var request = require('request');

request({
  method: 'POST',
  url: 'https://api.andia.io/v1/validate_transaction',
  headers: {
    'Content-Type': 'multipart/form-data;boundary={boundary value}',
    'Authentication': 'Your API_KEY',
    'Content-Disposition': 'form-data;''
  },
  body: "--{boundary value}
Content-Disposition: form-data; name="user_id";
user_id

--{boundary value}
Content-Disposition: form-data; name="selfie"; 
video
--{boundary value}--"
}, function (error, response, body) {
  console.log('Status:', response.statusCode);
  console.log('Headers:', JSON.stringify(response.headers));
  console.log('Response:', body);
});
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://api.andia.io/v1/validate_transaction");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, --{boundary value}
Content-Disposition: form-data; name="user_id";
user_id

--{boundary value}
Content-Disposition: form-data; name="selfie"; 
video
--{boundary value}--);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: multipart/form-data;boundary={boundary value}",
  "Authentication: Your API_KEY",
  "Content-Disposition: form-data;""
));

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
```

{% endtab %}

{% tab title="Java" %}

```java
// Maven : Add these dependecies to your pom.xml (java6+)
// <dependency>
//     <groupId>org.glassfish.jersey.core</groupId>
//     <artifactId>jersey-client</artifactId>
//     <version>2.8</version>
// </dependency>
// <dependency>
//     <groupId>org.glassfish.jersey.media</groupId>
//     <artifactId>jersey-media-json-jackson</artifactId>
//     <version>2.8</version>
// </dependency>

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Entity<String> payload = Entity.text("--{boundary value}
Content-Disposition: form-data; name="user_id";
user_id

--{boundary value}
Content-Disposition: form-data; name="selfie"; 
video
--{boundary value}--");
Response response = client.target("https://api.andia.io/v1/validate_transaction")
  .request(MediaType.TEXT_PLAIN_TYPE)
  .header("Authentication", "Your API_KEY")
  .header("Content-Disposition", "form-data;"")
  .post(payload);

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));
```

{% endtab %}

{% tab title="ASP.NET (C#)" %}

```csharp
//Common testing requirement. If you are consuming an API in a sandbox/test region, uncomment this line of code ONLY for non production uses.
//System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

//Be sure to run "Install-Package Microsoft.Net.Http" from your nuget command line.
using System;
using System.Net.Http;

var baseAddress = new Uri("https://api.andia.io/v1/");

using (var httpClient = new HttpClient{ BaseAddress = baseAddress })
{

  
  httpClient.DefaultRequestHeaders.TryAddWithoutValidation("authentication", "Your API_KEY");
  
  httpClient.DefaultRequestHeaders.TryAddWithoutValidation("content-disposition", "form-data;"");
  
    using (var content = new StringContent("--{boundary value}
Content-Disposition: form-data; name="user_id";
user_id

--{boundary value}
Content-Disposition: form-data; name="selfie"; 
video
--{boundary value}--", System.Text.Encoding.Default, "multipart/form-data;boundary={boundary value}"))
    {
      using (var response = await httpClient.PostAsync("validate_transaction", content))
      {
        string responseData = await response.Content.ReadAsStringAsync();
      }
  }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'rubygems' if RUBY_VERSION < '1.9'
require 'rest_client'

values = --{boundary value}
Content-Disposition: form-data; name="user_id";
user_id

--{boundary value}
Content-Disposition: form-data; name="selfie"; 
video
--{boundary value}--

headers = {
  :content_type => 'multipart/form-data;boundary={boundary value}',
  :authentication => 'Your API_KEY',
  :content_disposition => 'form-data;"'
}

response = RestClient.post 'https://api.andia.io/v1/validate_transaction', values, headers
puts response
```

{% endtab %}

{% tab title="Python" %}

```python
from urllib2 import Request, urlopen

values = """
--{boundary value}
Content-Disposition: form-data; name="user_id";
user_id

--{boundary value}
Content-Disposition: form-data; name="selfie"; 
video
--{boundary value}--"""

headers = {
  'Content-Type': 'multipart/form-data;boundary={boundary value}',
  'Authentication': 'Your API_KEY',
  'Content-Disposition': 'form-data;''
}
request = Request('https://api.andia.io/v1/validate_transaction', data=values, headers=headers)

response_body = urlopen(request).read()
print response_body
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://andia.gitbook.io/api/rest-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
