Cuentas — Crear y Actualizar
Crea cuentas nuevas y actualiza las existentes con actualizaciones parciales, productos y campos dinámicos.
Crear cuenta
POST
/apidev/v1/accountsPermisoAPICLI_ACCOUNTS_WRITE
Límite de solicitudes10 solicitudes/min
Cuerpo de la solicitud
| Campo | Tipo | Requerido | Máx | Descripción |
|---|---|---|---|---|
name | string | Sí | 200 | Nombre para mostrar de la cuenta. |
external_code | string | No | 120 | Identificador del sistema externo. |
status | string | No | 10 | Estado de la cuenta. |
business_name | string | No | 200 | Razón social. |
tax_id | string | No | 60 | Número de identificación fiscal. |
document | string | No | 60 | Número de documento. |
document_type | number | No | — | Identificador del tipo de documento. |
service_time_min | number | No | — | Tiempo de servicio en el lugar por defecto para esta cuenta, en minutos. El planificador lo usa para estimar cuánto dura una parada en esta cuenta. |
phone | string | No | 60 | Número de teléfono. |
mobile | string | No | 60 | Teléfono móvil. |
email | string | No | 200 | Dirección de correo electrónico. |
image_url | string | No | 500 | URL de la imagen. |
notes | string | No | 1000 | Notas de texto libre. |
street | string | No | 200 | Nombre de la calle. |
door_number | string | No | 20 | Número de puerta. |
apartment | string | No | 20 | Apartamento o unidad. |
corner | string | No | 200 | Esquina. |
zip_code | string | No | 20 | Código postal. |
latitude | number | No | — | Coordenada de latitud. |
longitude | number | No | — | Coordenada de longitud. |
country_id | string | No | 30 | ID del país. |
department_id | string | No | 30 | ID del departamento. |
client_id | string | No | 30 | ID del cliente asociado. |
qr_code | string | No | 30 | Valor del código QR. |
start_date | string | No | 30 | Fecha de inicio (ISO 8601). |
end_date | string | No | 30 | Fecha de fin (ISO 8601). |
birth_date | string | No | 30 | Fecha de nacimiento (ISO 8601). |
Ejemplos de código
- cURL
- JavaScript
- Python
curl -s -X POST "https://$TENANT/apidev/v1/accounts" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corp",
"business_name": "Acme Corporation S.A.",
"tax_id": "214100001019",
"email": "contact@acme.com",
"phone": "+59821234567",
"street": "Av. Rivera",
"door_number": "1234",
"country_id": "1",
"department_id": "10",
"client_id": "982710394857200005",
"start_date": "2026-01-15"
}'
const res = await fetch(
`https://${TENANT}/apidev/v1/accounts`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'X-API-Key': apiKey,
'tenant': TENANT,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Acme Corp',
business_name: 'Acme Corporation S.A.',
tax_id: '214100001019',
email: 'contact@acme.com',
phone: '+59821234567',
street: 'Av. Rivera',
door_number: '1234',
country_id: '1',
department_id: '10',
client_id: '982710394857200005',
start_date: '2026-01-15',
}),
}
);
const { data } = await res.json();
console.log(`Created account: ${data.id}`);
import requests
response = requests.post(
f"https://{TENANT}/apidev/v1/accounts",
headers={"Authorization": f"Bearer {token}", "X-API-Key": api_key, "tenant": TENANT},
json={
"name": "Acme Corp",
"business_name": "Acme Corporation S.A.",
"tax_id": "214100001019",
"email": "contact@acme.com",
"phone": "+59821234567",
"street": "Av. Rivera",
"door_number": "1234",
"country_id": "1",
"department_id": "10",
"client_id": "982710394857200005",
"start_date": "2026-01-15",
},
)
result = response.json()
print(f"Created account: {result['data']['id']}")
Respuesta de ejemplo
{
"success": true,
"data": {
"id": "982710394857201664"
}
}
Actualizar cuenta
Actualiza una cuenta existente. Solo se modifican los campos incluidos; los campos omitidos permanecen sin cambios. Enviá null para limpiar un campo que admita nulos.
Consultá Actualizaciones parciales para el patrón general.
PUT
/apidev/v1/accounts/{id}PermisoAPICLI_ACCOUNTS_WRITE
Límite de solicitudes10 solicitudes/min
Parámetros de ruta
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string | Sí | Identificador único de la cuenta. |
Cuerpo de la solicitud
Se aceptan todos los campos de Crear cuenta (ninguno requerido), incluido qr_code (string, máx 30 — enviá null para limpiarlo) y service_time_min (number — enviá null para limpiarlo). Además admite:
Arreglo products — Administra las asociaciones de productos:
| Acción | Campos requeridos | Descripción |
|---|---|---|
add | provider_id, product_type_id | Agrega un producto nuevo. Opcionales: coverage_id, start_date, end_date, status. |
update | product_id + campos a cambiar | Actualiza un producto existente. |
remove | product_id | Elimina un producto. |
Arreglo dynamic_fields — Establece o limpia campos personalizados:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
field_id | string | Sí | Identificador del campo dinámico. |
name | string | No | Nombre del campo. |
type | string | No | Tipo del campo. |
order | number | No | Orden de visualización. |
value | any | No | Nuevo valor (o null para limpiar). |
Ejemplos de código
- cURL
- JavaScript
- Python
curl -s -X PUT "https://$TENANT/apidev/v1/accounts/982710394857201664" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
-H "Content-Type: application/json" \
-d '{
"email": "new-contact@acme.com",
"notes": "Upgraded to premium tier",
"products": [
{
"action": "add",
"provider_id": "982710394857200030",
"product_type_id": "8",
"coverage_id": "12",
"start_date": "2026-04-01",
"status": "A"
},
{
"action": "remove",
"product_id": "982710394857201700"
}
],
"dynamic_fields": [
{ "field_id": "10", "value": "Premium" },
{ "field_id": "11", "value": null }
]
}'
const res = await fetch(
`https://${TENANT}/apidev/v1/accounts/982710394857201664`,
{
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`,
'X-API-Key': apiKey,
'tenant': TENANT,
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: 'new-contact@acme.com',
notes: 'Upgraded to premium tier',
products: [
{ action: 'add', provider_id: '982710394857200030', product_type_id: '8', coverage_id: '12', start_date: '2026-04-01', status: 'A' },
{ action: 'remove', product_id: '982710394857201700' },
],
dynamic_fields: [
{ field_id: '10', value: 'Premium' },
{ field_id: '11', value: null },
],
}),
}
);
const { data } = await res.json();
console.log(`Updated fields: ${data.updated_fields.join(', ')}`);
import requests
response = requests.put(
f"https://{TENANT}/apidev/v1/accounts/982710394857201664",
headers={"Authorization": f"Bearer {token}", "X-API-Key": api_key, "tenant": TENANT},
json={
"email": "new-contact@acme.com",
"notes": "Upgraded to premium tier",
"products": [
{"action": "add", "provider_id": "982710394857200030", "product_type_id": "8", "coverage_id": "12", "start_date": "2026-04-01", "status": "A"},
{"action": "remove", "product_id": "982710394857201700"},
],
"dynamic_fields": [
{"field_id": "10", "value": "Premium"},
{"field_id": "11", "value": None},
],
},
)
result = response.json()
print(f"Updated: {result['data']['updated_fields']}")
Respuesta de ejemplo
{
"success": true,
"data": {
"id": "982710394857201664",
"updated_fields": ["email", "notes", "products", "dynamic_fields"]
},
"meta": {}
}
Errores
| Código | HTTP | Descripción |
|---|---|---|
VALIDATION_ERROR | 400 | Parámetros inválidos. |
UNAUTHORIZED | 401 | tenant / Authorization / X-API-Key ausente, inválido o expirado |
FORBIDDEN | 403 | El usuario no tiene el permiso requerido. |
NOT_FOUND | 404 | Recurso no encontrado (endpoint de actualización). |
RATE_LIMITED | 429 | Se superaron 10 solicitudes/min. |
INTERNAL_ERROR | 500 | Error inesperado del servidor. |