> ## Documentation Index
> Fetch the complete documentation index at: https://docs.whaapy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Listar Campos Personalizados

> Obtiene las definiciones de campos personalizados configurados

Obtén la lista de campos personalizados definidos para tu negocio. Estos campos están tipados y estructurados para consistencia en tu CRM.

<Info>
  Los campos personalizados definidos aquí son diferentes de los `custom_fields` libres que puedes agregar a cualquier contacto. Estos campos tienen tipos específicos y pueden ser requeridos.
</Info>

***

## Ejemplos

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET https://api.whaapy.com/contacts/v1/fields \
    -H "Authorization: Bearer wha_TU_API_KEY"
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://api.whaapy.com/contacts/v1/fields', {
    headers: { 'Authorization': 'Bearer wha_TU_API_KEY' }
  });
  const data = await response.json();
  console.log(data.fields);
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      'https://api.whaapy.com/contacts/v1/fields',
      headers={'Authorization': 'Bearer wha_TU_API_KEY'}
  )
  print(response.json())
  ```

  ```php PHP theme={null}
  $ch = curl_init('https://api.whaapy.com/contacts/v1/fields');
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Authorization: Bearer wha_TU_API_KEY'
  ]);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($ch);
  echo $response;
  ```
</RequestExample>

***

## Respuesta Exitosa

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "fields": [
      {
        "id": "field-uuid-1",
        "name": "company",
        "type": "text",
        "description": "Nombre de la empresa",
        "is_required": false,
        "category": "business"
      },
      {
        "id": "field-uuid-2",
        "name": "contract_value",
        "type": "number",
        "description": "Valor del contrato en USD",
        "is_required": false,
        "category": "sales"
      },
      {
        "id": "field-uuid-3",
        "name": "birth_date",
        "type": "date",
        "description": "Fecha de nacimiento",
        "is_required": false,
        "category": "personal"
      },
      {
        "id": "field-uuid-4",
        "name": "website",
        "type": "url",
        "description": "Sitio web del contacto",
        "is_required": false,
        "category": "business"
      }
    ],
    "total_fields": 4
  }
  ```
</ResponseExample>

***

## Tipos de Campo

| Tipo     | Descripción        | Ejemplo de valor     |
| -------- | ------------------ | -------------------- |
| `text`   | Texto libre        | `"Acme Corporation"` |
| `number` | Valor numérico     | `50000`              |
| `date`   | Fecha (ISO 8601)   | `"2026-01-28"`       |
| `email`  | Email válido       | `"ceo@acme.com"`     |
| `phone`  | Número de teléfono | `"+5215512345678"`   |
| `url`    | URL válida         | `"https://acme.com"` |

***

## Campos de la Respuesta

| Campo                  | Tipo    | Descripción                     |
| ---------------------- | ------- | ------------------------------- |
| `fields`               | array   | Array de definiciones de campos |
| `fields[].id`          | string  | UUID único del campo            |
| `fields[].name`        | string  | Nombre del campo (snake\_case)  |
| `fields[].type`        | string  | Tipo de dato del campo          |
| `fields[].description` | string  | Descripción del campo           |
| `fields[].is_required` | boolean | Si el campo es obligatorio      |
| `fields[].category`    | string  | Categoría para agrupar campos   |
| `total_fields`         | number  | Total de campos definidos       |

***

## custom\_fields vs Field Definitions

<CardGroup cols={2}>
  <Card title="custom_fields (libres)">
    * Objeto JSON en cada contacto
    * Sin tipos definidos
    * Flexibilidad total
    * Ejemplo: `{ "any_key": "any_value" }`
  </Card>

  <Card title="Field Definitions (tipados)">
    * Definidos a nivel de negocio
    * Tipos específicos (text, number, date, etc.)
    * Pueden ser requeridos
    * Validación automática
  </Card>
</CardGroup>

<Tip>
  Usa **Field Definitions** para datos estructurados que necesitan consistencia (valor de contrato, fecha de renovación). Usa **custom\_fields** para datos ad-hoc que varían por contacto.
</Tip>

***

## Próximos Pasos

<CardGroup cols={2}>
  <Card title="Crear Contacto" icon="user-plus" href="/api-reference/contacts/create">
    Usar campos personalizados
  </Card>

  <Card title="Actualizar Contacto" icon="pen" href="/api-reference/contacts/update">
    Modificar campos personalizados
  </Card>

  <Card title="Búsqueda Avanzada" icon="magnifying-glass" href="/api-reference/contacts/search">
    Filtrar por campos personalizados
  </Card>

  <Card title="Listar Tags" icon="tags" href="/api-reference/contacts/tags">
    Ver tags disponibles
  </Card>
</CardGroup>
