# Agregar un cliente

Así como podés agregar un cliente de forma manual a través del Panel de Control de Persat, podés hacerlo a través del API. Lo que se requiere es hacer una consulta HTTP POST con los parámetros indicados.

<mark style="color:green;">`POST`</mark> `https://api.persat.com.ar/v1/clients`

#### Headers

| Name          | Type   | Description      |
| ------------- | ------ | ---------------- |
| Content-Type  | string | application/json |
| Authorization | string | Bearer API\_KEY  |

#### Request Body

| Name                                                                                | Type              | Description                                                                                                                                                                                            |
| ----------------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| uid\_client<mark style="color:red;">\*</mark>                                       | string            | El número/identificador de cliente (es un valor alfanumérico). Debe ser un valor único y sirve para luego poder accederlo en otros llamados a la API                                                   |
| company\_name<mark style="color:red;">\*</mark>                                     | string            | Nombre del cliente, razón social o nombre de fantasía. También debe ser un valor único. No puede haber dos clientes con la misma "Razon Social"                                                        |
| company\_description                                                                | string            | Descripción del cliente.                                                                                                                                                                               |
| latitude                                                                            | number            | Ubicación del cliente, latitud. Valor por default: 0                                                                                                                                                   |
| longitude                                                                           | number            | Ubicación del cliente, longitud. Valor por default: 0                                                                                                                                                  |
| service\_time                                                                       | number            | Tiempo de servicio. Se utiliza por el algoritmo de ruteo.                                                                                                                                              |
| wt                                                                                  | \[number, number] | Hora de apertura y cierre del local (en minutos). Se utiliza por el algoritmo de ruteo. Ver ejemplo en [Obtener Cliente](https://docs.api.persat.com.ar/entidades-basicas/clientes/obtener-un-cliente) |
| street                                                                              | string            | Calle en donde se encuentra el cliente. No incluir el número                                                                                                                                           |
| street\_nbr                                                                         | string            | Número de la calle. Si bien es numeración, debe ser enviado como string                                                                                                                                |
| neighborhood                                                                        | string            | Barrio, por ej: "Devoto"                                                                                                                                                                               |
| city                                                                                | string            | Ciudad, por ejemplo "CABA"                                                                                                                                                                             |
| country                                                                             | string            | País, por ejemplo: "Argentina"                                                                                                                                                                         |
| custom\_fields <mark style="color:red;">\*</mark> (puede haber campos obligatorios) | object            | Campos personalizados de la ficha de clientes. Se detalla más adelante en este artículo. Puede haber campos obligatorios.                                                                              |
| type\_id                                                                            | Number            | Identificador del tipo de cliente. En caso de no enviarse el cliente se creara con el type\_id = 0, que es el valor por defecto                                                                        |
| group\_id                                                                           | Number            | Identificador del grupo de cliente. En caso de no enviarse el cliente se creara con el group\_id = 0, que es el valor por defecto                                                                      |

{% tabs %}
{% tab title="200 El cliente fue creado" %}

```javascript
{
    "success": true,
    "data": {	
        "uid_client": "CL-0044"
        "company_name": "Persat",
        "company_description": "",
        "latitude": -34.60820392067226,
        "longitude": -58.48194122314454,
        "street": "Terrada",
        "street_nbr": "2309",
        "neighborhood": "Comuna 11",
        "city": "Buenos Aires",
        "country": "Argentina",
        "custom_fields": {
            "1": {
                "name": "Nombre",
                "value": ""
            },
            "2": {
                "name": "Teléfono",
                "value": "4504-5300"
            },
            "3": {
                "name": "Email",
                "value": ""
            },
            "4": {
                "name": "Campo 1",
                "value": ""
            },
            "5": {
                "name": "Campo 2",
                "value": ""
            },
            "6": {
                "name": "Campo n",
                "value": ""
            }
        }
    }
}
```

{% endtab %}

{% tab title="400 campos obligatorios" %}

```javascript
{
    "success": false,
    "error": {
        "status": 400,
        "type": "BAD_REQUEST",
        "userMessage": "'latitude' debe ser un número entre -90 y +90"
    }
}
```

{% endtab %}

{% tab title="409 Si el número de cliente ingresado uid\_client ya existe." %}

```javascript
{
    "success": false,
    "error": {
        "status": 409,
        "type": "CONFLICT",
        "userMessage": "Usted ya posee un cliente con este número de cliente"
    }
}
```

{% endtab %}

{% tab title="409: Conflict type\_id o group\_id invalidos. Tal vez en algun momento existian dentro de Persat pero el usuario administrador los elimino." %}

```javascript
{
    "success": false,
    "error": {
        "status": 409,
        "type": "CONFLICT",
        "userMessage": "type_id o group_id tiene un valor invalido. Enviar los campos en 0, o no enviar dichos campos"
    }
}
```

{% endtab %}
{% endtabs %}

A continuación un ejemplo con curl

```bash
curl --location --request POST "https://api.persat.com.ar/v1/clients" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer YOUR_API_KEY" \
  --data "{
	\"uid_client\":\"CL-0044\",  
	\"company_name\":\"Persat\",
	\"company_description\":\"Logistica GPS\",
	\"type_id\": 3,
	\"group_id\": 2,
	\"latitude\":-34.54646,
	\"longitude\":-58.4324324,
	\"street\":\"Av. Rivadavia\",
	\"street_nbr\":232,
	\"neighborhood\":\"Devoto\",
	\"city\":\"CABA\",
	\"country\":\"Argentina\",
	\"custom_fields\": {
        \"2\": \"4504-5300\"
	}
  }"
```

Los campos son explicados en la sección [Obtener un cliente](https://docs.api.persat.com.ar/entidades-basicas/clientes/obtener-un-cliente)

Algunas aclaraciones respecto a este request.

{% hint style="warning" %}
Si bien `latitude` y `longitude` no son campos obligatorios, en Persat todos los clientes se tienen que poder representar en un mapa. Por lo cual, en caso de no enviar estos dos atributos, ambos terminan quedando en 0, dando como resultado un cliente creado en el oceano.

![](https://3878285185-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LZX85SzYcp8wvaPjODD%2Fuploads%2FUqx2h8X5uRDu6vimjdiZ%2Fimage.png?alt=media\&token=09074c41-427e-45c6-bd20-416afef6fbea)
{% endhint %}

{% hint style="danger" %}
IMPORTANTE: En ningún caso la dirección se calcula automáticamente en base a `latitude` y `longitude.`Esto si ocurre desde la aplicación web de Persat, o desde la app de Android. La misma aclaración vale para el caso inverso, es decir que no se calcula la latitud y longitud en base a los datos de dirección enviados.

Es responsabilidad del programador, hacer el geocoding correspondiente para poder brindar los datos de posición
{% endhint %}
