---
title: "Crea una definición de campo de contacto"
method: POST
path: "/variables/field-definitions"
tags: ["Variables"]
---

# Crea una definición de campo de contacto

`POST /variables/field-definitions`

## Request

- Base URL: `https://api.met.meteor.com.co/api/v1`
- URL: `https://api.met.meteor.com.co/api/v1/variables/field-definitions`
- Auth: one of:
  - `bearer` (a scheme the document does not define)
  - HTTP bearer

Declara un campo de contacto nuevo. A partir de ahí ese campo se puede escribir en los contactos y usar como token de variable en las plantillas.

## Request body

- CreateFieldDefinitionDto
  - `description` string
  - `field_key` string, required
  - `label` string, required
  - `option_parents` object: Con `parent_field_key`: a qué opción del padre pertenece cada opción de este campo (`{ opción: opción del padre }`). Una opción sin entrada se ofrece siempre, sea cual sea el valor del padre.
  - `options` string[]: `select`: opciones válidas del campo (texto plano — cada opción es a la vez el valor guardado y la etiqueta visible). `currency`: un único elemento con el código ISO de la moneda (`['COP']`). Reusa la misma columna JSONB; para el resto de los tipos se ignora.
  - `parent_field_key` string, nullable: Lista dependiente: `field_key` de otro campo de lista del que depende este. Solo para `select`. `null` u omitido = lista independiente.
  - `type` 'text' | 'number' | 'boolean' | 'date' | 'datetime' | 'json' | 'select' | 'currency', required

## Response `201`

- object: Sobre en el que viaja toda respuesta correcta de la API. El recurso está en `data`. Los SDKs oficiales lo desenvuelven por ti; un cliente hecho a mano tiene que leer `.data`.
  - `success` true, required: Siempre `true` en una respuesta 2xx.
  - `data` ContactFieldDefinitionDto, required
    - `created_at` string, required
    - `description` string, nullable, required
    - `field_key` string, required: Clave del campo: se usa en las plantillas como `$contact.<field_key>`.
    - `id` number, required
    - `label` string, required: Nombre visible del campo en la interfaz.
    - `option_parents` object, required: Con `parent_field_key`: opción del padre a la que pertenece cada opción (`{ opción: opción del padre }`). Una opción sin entrada se ofrece siempre.
    - `options` string[], required: Config extra del tipo: para `select`, los valores permitidos; para `currency`, el código ISO de la moneda (un solo elemento). Vacío para los demás tipos.
    - `parent_field_key` string, nullable, required: Lista dependiente: `field_key` del campo de lista del que depende este, o `null` si es independiente.
    - `type` 'text' | 'number' | 'boolean' | 'date' | 'datetime' | 'json' | 'select' | 'currency', required
    - `workspace_id` number, required

## Other responses

- `400`: La request no es válida: un campo no pasa validación, falta un parámetro requerido o el recurso no admite la transición solicitada.
- `401`: API key ausente, inválida, revocada o expirada — o el workspace está bloqueado.
- `403`: La key está autenticada pero no puede ejecutar esta operación: scope faltante, capacidad deshabilitada, modo test restringido o recurso fuera de su cartera.
- `404`: El recurso no existe o no está disponible dentro del alcance de la key. No revela la existencia de recursos de otros tenants.
- `409`: La operación entra en conflicto con el estado actual o con un Idempotency-Key en uso. No reintentes con el mismo key y un body distinto.
- `429`: Se superó el límite por minuto de la key o la cuota del plan. Respeta `Retry-After`; el SDK ya reintenta solo.
- `500`: Error del servidor o del Met que ejecutaba. El SDK reintenta los 5xx con backoff.

---

[API](https://skmtc.dev/meteor/apis/met-public-api.md) · [All operations](https://skmtc.dev/meteor/apis/met-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/meteor/apis/met-public-api/revisions/fc6d3aad75de?raw)
