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

# Listar contactos

> Obtener todos los contactos de tu organización con paginación y búsqueda.

## Endpoint

```
GET /api/contacts
```

Obtené todos los contactos de tu organización con paginación y búsqueda.

## Headers

<ParamField header="Authorization" type="string" required>
  Bearer token con tu API key. Formato: `Bearer sk_live_xxx`
</ParamField>

## Query Parameters

<ParamField query="offset" type="number" default="0">
  Número de página para paginación (0-indexed)
</ParamField>

<ParamField query="limit" type="number" default="100">
  Cantidad de resultados por página
</ParamField>

<ParamField query="search" type="string">
  Buscar contactos por email (búsqueda parcial)
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET "https://app.horneross.com/api/contacts?limit=50&search=gmail" \
    -H "Authorization: Bearer sk_live_xxx"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://app.horneross.com/api/contacts?limit=50&search=gmail',
    {
      headers: {
        'Authorization': 'Bearer sk_live_xxx',
      },
    }
  );

  const { contacts, count } = await response.json();
  console.log(`Total: ${count} contactos`);
  ```

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

  response = requests.get(
      'https://app.horneross.com/api/contacts',
      headers={'Authorization': 'Bearer sk_live_xxx'},
      params={
          'limit': 50,
          'search': 'gmail'
      }
  )

  data = response.json()
  print(f'Total: {data["count"]} contactos')
  ```
</RequestExample>

## Response

<ResponseField name="contacts" type="array" required>
  Array de contactos

  <Expandable title="Propiedades de cada contacto">
    <ResponseField name="contacts[].id" type="string" required>
      ID único del contacto
    </ResponseField>

    <ResponseField name="contacts[].email" type="string">
      Email del contacto
    </ResponseField>

    <ResponseField name="contacts[].phoneNumber" type="string">
      Número de teléfono (con código de país)
    </ResponseField>

    <ResponseField name="contacts[].firstName" type="string">
      Nombre del contacto
    </ResponseField>

    <ResponseField name="contacts[].lastName" type="string">
      Apellido del contacto
    </ResponseField>

    <ResponseField name="contacts[].instagramId" type="string">
      ID de Instagram (si fue capturado via Instagram)
    </ResponseField>

    <ResponseField name="contacts[].organizationId" type="string" required>
      ID de la organización
    </ResponseField>

    <ResponseField name="contacts[].createdAt" type="string" required>
      Fecha de creación (ISO 8601)
    </ResponseField>

    <ResponseField name="contacts[].updatedAt" type="string" required>
      Fecha de última actualización (ISO 8601)
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="count" type="number" required>
  Total de contactos que coinciden con los filtros (para paginación)
</ResponseField>

<ResponseExample>
  ```json 200 - Success theme={null}
  {
    "contacts": [
      {
        "id": "contact_abc123",
        "email": "maria@gmail.com",
        "phoneNumber": "+5491123456789",
        "firstName": "María",
        "lastName": "García",
        "instagramId": null,
        "organizationId": "org_xyz",
        "createdAt": "2024-01-21T10:00:00Z",
        "updatedAt": "2024-01-21T15:30:00Z"
      },
      {
        "id": "contact_def456",
        "email": "juan@gmail.com",
        "phoneNumber": null,
        "firstName": "Juan",
        "lastName": "Pérez",
        "instagramId": null,
        "organizationId": "org_xyz",
        "createdAt": "2024-01-20T14:00:00Z",
        "updatedAt": "2024-01-20T14:00:00Z"
      }
    ],
    "count": 150
  }
  ```
</ResponseExample>

## Paginación

Para paginar resultados, usá `offset` y `limit`:

```javascript theme={null}
// Primera página
const page1 = await fetch('/api/contacts?offset=0&limit=50');

// Segunda página
const page2 = await fetch('/api/contacts?offset=1&limit=50');

// Tercera página
const page3 = await fetch('/api/contacts?offset=2&limit=50');
```

<Info>
  El `offset` representa el número de página (0-indexed), no el número de registros a saltar.
</Info>
