---
title: "GET /campaigns/{campaignId}/links"
description: "Links vinculados, paginados — parâmetros, schemas e exemplos completos."
sidebar:
  hidden: true
---

**Links vinculados, paginados.** Contrato v1 · disponível em produção e homologação · operação `getCampaignsCampaignIdLinks`. [Guia funcional](/produto/organizacao/) · [Índice](/api/operacoes/) · [Schemas](/referencia/) · [Testar em sandbox](/console/?operation=getCampaignsCampaignIdLinks).

## Autenticação e efeito

Permissão: `campaigns:read`. Sessão humana ou chave de servidor limitada ao proprietário e aos aplicativos autorizados. OAuth/MCP ainda não estão disponíveis. Uma chave de exemplo deve incluir somente esta permissão e as leituras necessárias ao seu fluxo, restrita a `app_loja`; emita-a na área autenticada de desenvolvedores.

Disponível em produção e homologação; sujeito às capacidades do app e à configuração do provedor. OAuth só será aceito após B1b. Campos desconhecidos rejeitados. Consulte os ADRs para regras semânticas além do JSON Schema.

Consulta não altera o recurso. Downloads revalidam autorização e têm prazo/estado conforme o guia.

## Parâmetros

| Nome | Local | Obrigatório | Tipo e restrições |
| --- | --- | --- | --- |
| `campaignId` | path | sim |  Revision; {"type":"string","format":"uuid"} |
| `limit` | query | não |  integer; {"type":"integer","minimum":1,"maximum":100} |
| `cursor` | query | não |  Cursor; {"type":"string","maxLength":2048,"pattern":"^c1\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$"} |

Paginação por cursor assinado; preserve credencial, concessão, filtros, ordem e limite. Cursor expira em 15 minutos. A lista mutável não fornece snapshot. Use pagination.nextCursor até hasMore=false.

## Corpo e semântica

Sem corpo. Envie os parâmetros na URL e os headers indicados.

Omitir campos opcionais usa o default documentado ou preserva o valor em PATCH. `null` só é aceito nos campos cujo schema permite null, com efeito de limpar/desvincular indicado no guia. Arrays enviados substituem a coleção quando o endpoint define atualização completa; não implicam merge. Identificadores/owner/app de um recurso existente não são transferidos por PATCH. Herança de templates/UTMs segue o guia, sem alterar links anteriores por cópia automática.




## cURL

`AGILINK_API_KEY` deve ficar no servidor. Os placeholders abaixo são fictícios. Preserve Idempotency-Key e payload ao repetir uma intenção após timeout.

```sh
curl --request GET 'https://api.staging.agilink.io/v1/campaigns/90000000-0000-4000-8000-000000000001/links' \
  --header 'Authorization: Bearer <credencial>'
```

## JavaScript / TypeScript

```js
// Node.js 22+. Defina AGILINK_API_KEY no ambiente do servidor.
const response = await fetch('https://api.staging.agilink.io/v1/campaigns/90000000-0000-4000-8000-000000000001/links', {
  method: 'GET',
  headers: {
  "Authorization": `Bearer ${process.env.AGILINK_API_KEY}`
},
  redirect: 'error', signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error('HTTP '+response.status+' requestId='+response.headers.get('X-Request-Id'));
const result = await response.json();
console.log(result);
```

## Python

```python
# Python 3.10+; pip install requests
import os
import requests
headers = {
  "Authorization": "Bearer " + os.environ["AGILINK_API_KEY"]
}
response = requests.request(
    'GET', 'https://api.staging.agilink.io/v1/campaigns/90000000-0000-4000-8000-000000000001/links',
    headers=headers,
    timeout=30, allow_redirects=False)
if not 200 <= response.status_code < 300:
    raise RuntimeError(f'HTTP {response.status_code}; requestId={response.headers.get("X-Request-Id")}')
result = response.json()
print(result)
```

## Response 200

Sucesso. Exemplo fictício.

| Header | Significado | Exemplo |
| --- | --- | --- |
| `X-Request-Id` | Identificador gerado pelo servidor, inclusive para falhas e replays. | conforme resposta |
| `Cache-Control` | Respostas administrativas não podem ser armazenadas. | no-store, no-transform |

```json
{
  "data": [
    {
      "id": "go.example.com~-ofertas~-tenis",
      "appId": "app_loja",
      "domain": "go.example.com",
      "prefix": "ofertas",
      "slug": "tenis",
      "url": "https://go.example.com/ofertas/tenis",
      "title": "Tênis da campanha",
      "description": null,
      "imageUrl": null,
      "desktopUrl": "https://shop.example.com/produtos/tenis",
      "appPath": "produtos/tenis",
      "parameters": {},
      "webOnly": false,
      "behavior": "manual",
      "group": "operational",
      "origin": "api",
      "revision": "20000000-0000-4000-8000-000000000001",
      "createdAt": "2026-10-19T20:00:00Z",
      "updatedAt": "2026-10-19T20:00:00Z",
      "publication": {
        "status": "pending",
        "desiredRevision": "20000000-0000-4000-8000-000000000001",
        "confirmedRevision": null,
        "updatedAt": "2026-10-19T20:00:00Z"
      }
    }
  ],
  "pagination": {
    "nextCursor": null,
    "hasMore": false
  },
  "meta": {
    "requestId": "req_00000000000040008000000000000001"
  }
}
```

| Campo | Tipo | Obrigatório | Significado e limites |
| --- | --- | --- | --- |
| `data` | array | sim | Resultado tipado da operação. Até 100 itens |
| `data[].id` | LinkId | sim | Identificador estável do recurso.  |
| `data[].appId` | string | sim | Aplicativo proprietário; precisa estar autorizado. Até 500 caracteres; Formato validado pelo schema |
| `data[].domain` | Domain | sim | Hostname, sem protocolo ou caminho.  |
| `data[].prefix` | string | sim | Prefixo de caminho, sem barras. Até 200 caracteres; Formato validado pelo schema |
| `data[].slug` | string | sim | Segmento final da identidade. Até 200 caracteres; Formato validado pelo schema |
| `data[].url` | string | sim | Endereço do recurso; não acrescente credenciais. Até 4096 caracteres; uri; Formato validado pelo schema |
| `data[].folderId` | string ou null | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].campaignId` | string ou null | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].lifecycle` | LinkLifecycle | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].lifecycle.archived` | boolean | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].lifecycle.paused` | boolean | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].lifecycle.startsAt` | AnalyticsInstant ou null | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].lifecycle.expiresAt` | AnalyticsInstant ou null | sim | Fim de validade; não amplia concessões.  |
| `data[].lifecycle.fallbackUrl` | string ou null | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].utm` | UtmParameters | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].utm.utm_source` | string | não | Valor tipado; formato e restrições completos no schema abaixo. Até 200 caracteres; Formato validado pelo schema |
| `data[].utm.utm_medium` | string | não | Valor tipado; formato e restrições completos no schema abaixo. Até 200 caracteres; Formato validado pelo schema |
| `data[].utm.utm_campaign` | string | não | Valor tipado; formato e restrições completos no schema abaixo. Até 200 caracteres; Formato validado pelo schema |
| `data[].utm.utm_term` | string | não | Valor tipado; formato e restrições completos no schema abaixo. Até 200 caracteres; Formato validado pelo schema |
| `data[].utm.utm_content` | string | não | Valor tipado; formato e restrições completos no schema abaixo. Até 200 caracteres; Formato validado pelo schema |
| `data[].title` | string ou null | sim | Título público.  |
| `data[].description` | string ou null | não | Texto de apresentação.  |
| `data[].imageUrl` | string ou null | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].desktopUrl` | string ou null | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].playStoreUrl` | string ou null | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].appStoreUrl` | string ou null | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].appPath` | string ou null | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].parameters` | Parameters | não | Parâmetros tipados do link; limites UTF-8 também se aplicam.  |
| `data[].webOnly` | boolean | não | Direcionamento web; exige destino web válido.  |
| `data[].behavior` | manual / automatic / intelligent | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].group` | main / operational | sim | Grupo main/operational; diferente de pasta/campanha.  |
| `data[].templateData` | object | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection` | object | não | Herança, oficial ou versão customizada publicada.  |
| `data[].templateSelection.android` | object ou object ou object | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection.android.mode` | objeto | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection.android.mode` | objeto | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection.android.mode` | objeto | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection.android.templateId` | string | sim | Valor tipado; formato e restrições completos no schema abaixo. uuid |
| `data[].templateSelection.android.version` | integer | sim | Valor tipado; formato e restrições completos no schema abaixo. Mínimo 1 |
| `data[].templateSelection.ios` | object ou object ou object | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection.ios.mode` | objeto | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection.ios.mode` | objeto | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection.ios.mode` | objeto | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection.ios.templateId` | string | sim | Valor tipado; formato e restrições completos no schema abaixo. uuid |
| `data[].templateSelection.ios.version` | integer | sim | Valor tipado; formato e restrições completos no schema abaixo. Mínimo 1 |
| `data[].templateSelection.recovery` | object ou object ou object | não | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection.recovery.mode` | objeto | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection.recovery.mode` | objeto | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection.recovery.mode` | objeto | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].templateSelection.recovery.templateId` | string | sim | Valor tipado; formato e restrições completos no schema abaixo. uuid |
| `data[].templateSelection.recovery.version` | integer | sim | Valor tipado; formato e restrições completos no schema abaixo. Mínimo 1 |
| `data[].origin` | dashboard / api | sim | Origem de criação, preservada.  |
| `data[].revision` | string | sim | Revisão forte para If-Match; muda ao editar. uuid |
| `data[].createdAt` | string | sim | Instante de criação com fuso. date-time |
| `data[].updatedAt` | string | sim | Instante da última alteração. date-time |
| `data[].publication` | object | sim | Confirmação eventual da projeção pública.  |
| `data[].publication.status` | pending / synced / failed | sim | Estado atual; consulte as transições no guia do recurso.  |
| `data[].publication.desiredRevision` | string | sim | Valor tipado; formato e restrições completos no schema abaixo. uuid |
| `data[].publication.confirmedRevision` | string ou null | sim | Valor tipado; formato e restrições completos no schema abaixo.  |
| `data[].publication.updatedAt` | string | sim | Instante da última alteração. date-time |
| `data[].tagIds` | array | não | Valor tipado; formato e restrições completos no schema abaixo. Até 20 itens |
| `data[].state` | active / paused / scheduled / expired | não | Estado atual do recurso.  |
| `pagination` | Pagination | sim | Continuação da lista; não é snapshot.  |
| `pagination.nextCursor` | Cursor ou null | sim | Cursor assinado; conserve filtros, credencial e limite.  |
| `pagination.hasMore` | boolean | sim | Indica se há continuação.  |
| `meta` | object | sim | Correlação e informações da resposta.  |
| `meta.requestId` | RequestId | sim | Identificador de correlação gerado pelo servidor.  |

## Falhas, revisão e repetição

Respeite Retry-After quando existir. Leituras podem ser repetidas após falhas transitórias. Não faça retry automático ilimitado.

| Status | Significado |
| --- | --- |
| 400 | Cabeçalho, query, cursor ou JSON inválido. |
| 401 | Credencial inválida, expirada ou revogada. |
| 403 | Operação sem permissão ou capacidade desabilitada. |
| 404 | Recurso inexistente ou fora dos aplicativos autorizados. |
| 422 | JSON bem formado com dados de domínio inválidos. |
| 429 | Quota excedida. Respeitar Retry-After. |
| 500 | Falha interna. Use requestId para diagnóstico. |
| 503 | Dependência indisponível; resultado da mutação pode ser incerto. |

### Exemplo 401

```json
{
  "error": {
    "code": "unauthenticated",
    "message": "Credencial inválida, expirada ou revogada.",
    "requestId": "req_00000000000040008000000000000001",
    "documentationUrl": "https://docs.agilink.io/api/errors/#unauthenticated"
  }
}
```

### Exemplo 403

```json
{
  "error": {
    "code": "insufficient_permission",
    "message": "Operação sem permissão ou capacidade desabilitada.",
    "requestId": "req_00000000000040008000000000000001",
    "documentationUrl": "https://docs.agilink.io/api/errors/#insufficient-permission"
  }
}
```

### Exemplo 429

```json
{
  "error": {
    "code": "rate_limited",
    "message": "Quota excedida. Respeitar Retry-After.",
    "requestId": "req_00000000000040008000000000000001",
    "documentationUrl": "https://docs.agilink.io/api/errors/#rate-limited"
  }
}
```

## Schema completo e próximos passos

<details><summary>Schema de request</summary>

```json
{
  "description": "Sem corpo"
}
```

</details>

<details><summary>Schema de response</summary>

```json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "id": {
            "$ref": "#/components/schemas/LinkId"
          },
          "appId": {
            "type": "string",
            "maxLength": 500,
            "minLength": 1,
            "pattern": "^[^/\\u0000-\\u001f\\u007f]+$"
          },
          "domain": {
            "$ref": "#/components/schemas/Domain"
          },
          "prefix": {
            "type": "string",
            "maxLength": 200,
            "pattern": "^(?!.*~-)(?!\\.{1,2}$)[A-Za-z0-9._~-]*$"
          },
          "slug": {
            "type": "string",
            "maxLength": 200,
            "pattern": "^(?!.*~-)(?!\\.{1,2}$)[A-Za-z0-9._~-]*$",
            "minLength": 1
          },
          "url": {
            "type": "string",
            "maxLength": 4096,
            "format": "uri",
            "pattern": "^https://[^/@?#\\s]+(?:[/?#]|$)"
          },
          "folderId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "campaignId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ]
          },
          "lifecycle": {
            "$ref": "#/components/schemas/LinkLifecycle"
          },
          "utm": {
            "$ref": "#/components/schemas/UtmParameters"
          },
          "title": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000,
                "pattern": "^[^\\u0000-\\u001f\\u007f]*$"
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4000,
                "pattern": "^[^\\u0000-\\u001f\\u007f]*$"
              },
              {
                "type": "null"
              }
            ]
          },
          "imageUrl": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4096,
                "format": "uri",
                "pattern": "^https://[^/@?#\\s]+(?:[/?#]|$)"
              },
              {
                "type": "null"
              }
            ]
          },
          "desktopUrl": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4096,
                "format": "uri",
                "pattern": "^https://[^/@?#\\s]+(?:[/?#]|$)"
              },
              {
                "type": "null"
              }
            ]
          },
          "playStoreUrl": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4096,
                "format": "uri",
                "pattern": "^https://[^/@?#\\s]+(?:[/?#]|$)"
              },
              {
                "type": "null"
              }
            ]
          },
          "appStoreUrl": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 4096,
                "format": "uri",
                "pattern": "^https://[^/@?#\\s]+(?:[/?#]|$)"
              },
              {
                "type": "null"
              }
            ]
          },
          "appPath": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2048,
                "minLength": 1,
                "pattern": "^(?!/)(?!.*[?#\\\\])(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/]+(?:/[^/]+)*$"
              },
              {
                "type": "null"
              }
            ]
          },
          "parameters": {
            "$ref": "#/components/schemas/Parameters"
          },
          "webOnly": {
            "type": "boolean"
          },
          "behavior": {
            "enum": [
              "manual",
              "automatic",
              "intelligent"
            ]
          },
          "group": {
            "enum": [
              "main",
              "operational"
            ]
          },
          "templateData": {
            "type": "object",
            "additionalProperties": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            }
          },
          "templateSelection": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "android": {
                "oneOf": [
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "const": "inherit"
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "const": "official"
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "const": "custom"
                      },
                      "templateId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "version": {
                        "type": "integer",
                        "minimum": 1
                      }
                    },
                    "required": [
                      "mode",
                      "templateId",
                      "version"
                    ]
                  }
                ]
              },
              "ios": {
                "oneOf": [
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "const": "inherit"
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "const": "official"
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "const": "custom"
                      },
                      "templateId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "version": {
                        "type": "integer",
                        "minimum": 1
                      }
                    },
                    "required": [
                      "mode",
                      "templateId",
                      "version"
                    ]
                  }
                ]
              },
              "recovery": {
                "oneOf": [
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "const": "inherit"
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "const": "official"
                      }
                    },
                    "required": [
                      "mode"
                    ]
                  },
                  {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "mode": {
                        "const": "custom"
                      },
                      "templateId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "version": {
                        "type": "integer",
                        "minimum": 1
                      }
                    },
                    "required": [
                      "mode",
                      "templateId",
                      "version"
                    ]
                  }
                ]
              }
            },
            "required": []
          },
          "origin": {
            "enum": [
              "dashboard",
              "api"
            ]
          },
          "revision": {
            "type": "string",
            "format": "uuid"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "publication": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "status": {
                "enum": [
                  "pending",
                  "synced",
                  "failed"
                ]
              },
              "desiredRevision": {
                "type": "string",
                "format": "uuid"
              },
              "confirmedRevision": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "updatedAt": {
                "type": "string",
                "format": "date-time"
              }
            },
            "required": [
              "status",
              "desiredRevision",
              "confirmedRevision",
              "updatedAt"
            ]
          },
          "tagIds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            },
            "maxItems": 20,
            "uniqueItems": true
          },
          "state": {
            "enum": [
              "active",
              "paused",
              "scheduled",
              "expired"
            ]
          }
        },
        "required": [
          "id",
          "appId",
          "domain",
          "prefix",
          "slug",
          "url",
          "title",
          "desktopUrl",
          "group",
          "origin",
          "revision",
          "createdAt",
          "updatedAt",
          "publication"
        ]
      },
      "maxItems": 100
    },
    "pagination": {
      "$ref": "#/components/schemas/Pagination"
    },
    "meta": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "requestId": {
          "$ref": "#/components/schemas/RequestId"
        }
      },
      "required": [
        "requestId"
      ]
    }
  },
  "required": [
    "data",
    "pagination",
    "meta"
  ]
}
```

</details>

[Convenções e limites](/api/contratos/) · [Erros](/api/errors/) · [Receitas completas](/receitas/) · [Guia funcional](/produto/organizacao/).
