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

# Campos, arquivos e satisfação

> Consultar campos personalizados, anexar documentos e gerar links de avaliação.

## Campos personalizados

Consulte `GET /integrations/external/custom-fields` com a permissão `crm/custom-field.read` para obter IDs, seções, opções e regras de preenchimento. A resposta contém `total` e `records`. Envie `take` explicitamente para limitar a página.

| `entity_type` | Entidade |
| - | - |
| `1` | Lead |
| `2` | Oportunidade |
| `3` | Entrega |
| `4` | Proposta |

```bash theme={null}
curl --url 'https://api.wegly.com.br/integrations/external/custom-fields?entity_type=4&status=1&take=100' \
  --header "Authorization: Bearer $WEGLY_API_KEY"
```

Os metadados incluem `section_id`, `section`, `is_required`, `is_visible_on_create`, `min_checkbox_selections` e `max_checkbox_selections`. Em seleções, use os IDs retornados em `options`.

| `type` | Formato |
| - | - |
| `0`, `1` | Texto curto e texto longo |
| `2` | Número |
| `3` | Rádio: uma opção, enviada em `option_id` |
| `4` | Seleção: envie `option_id` quando `max_checkbox_selections` for `1`; nos demais casos, envie `option_ids` |
| `5` | Caixas de seleção: envie `option_ids`, respeitando `min_checkbox_selections` e `max_checkbox_selections` |
| `6` | Arquivo; não disponível para proposta e não pode ser preenchido pelas rotas externas de lead e oportunidade |
| `7` | Data: `YYYY-MM-DD` |
| `8` | Hora: `HH:mm` |
| `9` | Data e hora local: `YYYY-MM-DDTHH:mm` |
| `10` | Booleano; exclusivo de proposta |

O corpo de preenchimento depende da entidade: consulte os guias de [leads e oportunidades](/documentacao-da-api/integracoes/leads-e-oportunidades) e de [propostas](/documentacao-da-api/integracoes/propostas). Enviar `option_id` onde o campo espera `option_ids`, ou o contrário, retorna `400`.

Como as rotas externas de lead e oportunidade não recebem arquivos, um campo do tipo arquivo marcado como obrigatório impede a criação por essas rotas.

## Arquivos

Estas rotas guardam arquivos de um lead ou de uma oportunidade. Para anexar arquivos a uma proposta, use os [anexos de proposta](/documentacao-da-api/integracoes/propostas#anexos), que têm rotas, formatos e limites próprios.

Use `POST /integrations/external/files/batches` com `multipart/form-data` e a permissão `crm/file.create`. Informe exatamente um destino entre `crm_lead_id`, `crm_deal_id`, `lead_code` e `deal_code`.

```bash theme={null}
curl --request POST \
  --url 'https://api.wegly.com.br/integrations/external/files/batches' \
  --header "Authorization: Bearer $WEGLY_API_KEY" \
  --form 'deal_code=1024' \
  --form 'title=Documentos da negociação' \
  --form 'files=@/caminho/contrato-social.pdf;type=application/pdf'
```

Envie um ou mais arquivos nos campos `file` ou `files`, com até 20 arquivos por campo multipart. As extensões aceitas são `.md`, `.markdown`, `.pdf`, `.docx`, `.xls`, `.xlsx` e `.txt`. Se o nome não tiver extensão, a API aceita o arquivo quando o MIME corresponde a um desses formatos. `title` é opcional e aceita até 150 caracteres; `note` permite uma observação. Cada arquivo aceita até 100 MB, e a soma dos arquivos de uma requisição, até 2.000 MB; acima disso, a API retorna `400`.

A criação retorna o lote com `files_count`, `total_size` e `files`. Para listar os arquivos individualmente, envie `take` explicitamente para limitar a página e use `GET /integrations/external/files` com exatamente um dos mesmos filtros de destino. A consulta por ID usa `GET /integrations/external/files/{id}`; a exclusão lógica usa `DELETE` no mesmo caminho e retorna `{ "success": true }`. Na listagem, `search` procura pelo nome do arquivo.

Listar e consultar exigem `crm/file.read`; excluir exige `crm/file.delete`. Na exclusão, o usuário criador da chave também precisa ser administrador, autor do arquivo ou do lote, ou supervisor da equipe do autor; caso contrário, a API retorna `403`.

Os links `file_url` são temporários. Consulte novamente o arquivo para obter uma URL atualizada.

## Links de satisfação

Use `POST /integrations/external/satisfaction/forms/{id}/share-links` com `crm/satisfaction.links.create` para gerar um link de um formulário ativo:

```json theme={null}
{
  "crm_person_id": "11111111-1111-4111-8111-111111111111",
  "crm_deal_id": "22222222-2222-4222-8222-222222222222",
  "expires_at": "2027-03-31T23:59:59-03:00",
  "max_uses": 1
}
```

`crm_person_id` é obrigatório. Você pode associar uma oportunidade por `crm_deal_id` ou uma entrega por `crm_delivery_id`, mas não ambos. `max_uses` aceita de 1 a 1.000; quando omitido, não há limite explícito de usos. Sem `expires_at`, o link não expira por data. A API aceita uma data no passado, mas o link já nasce expirado; substitua a data do exemplo por uma data futura.

A resposta `201` inclui `id`, `token`, `expires_at`, `max_uses`, `url` e `form_url`. Compartilhe **`form_url`** com o respondente; `url` é o caminho da API mantido por compatibilidade. As respostas públicas podem gerar o evento `satisfaction.public_submission_created`, descrito em [webhooks](/documentacao-da-api/eventos-de-webhooks/index).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.