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

# Dados do código QR por tipo

> O formato dos dados, um exemplo de pedido e o que pode ser editado após a impressão em cada um dos 16 tipos de código QR.

> [!NOTE]
>
> A API do GetQR está em versão beta e só está disponível para alguns espaços de trabalho. Os detalhes podem mudar antes do lançamento geral.

Cada código QR tem um `qrType`, e o tipo define o que `data` tem de conter. Este guia indica o formato de cada tipo, um corpo de pedido que funciona e o que ainda pode alterar depois de o código ser impresso.

Os exemplos são corpos de pedido para [Criar um código QR](https://docs.getqr.com/pt/api/endpoints/qr-codes.md#criar-um-código-qr). Envie-os assim:

```bash theme={null}
curl -X POST "https://getqr.com/api/v1/qrs" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "qrType": "website", "data": "https://example.com/menu", "title": "Menu" }'
```

## Todos os tipos num relance

| `qrType` | `data` | Editável após a impressão |
| - | - | - |
| [`website`](#website) | URL http(s) | Sim |
| [`feedback`](#feedback) | URL http(s) do formulário | Sim |
| [`payment`](#pagamento) | URL do fornecedor de pagamentos | Sim |
| [`whatsapp`](#whatsapp) | Ligação `wa.me` | Sim |
| [`location`](#localização) | URL de um mapa | Sim |
| [`app`](#app-link) | URL da loja ou vazio, mais `link.ios` / `link.android` | Sim |
| [`email`](#email) | URI `mailto:` | Sim |
| [`sms`](#sms) | URI `sms:` | Sim |
| [`wifi`](#wifi) | Payload `WIFI:` | **Não** |
| [`pdf`, `image`, `video`](#pdf-imagem-e-vídeo) | Vazio, com um `fileId` | Sim |
| [`vcard`](#vcard) | Texto vCard 3.0 | Sim |
| [`social`](#social-media) | String JSON | Sim |
| [`multilink`](#multi-link) | String JSON | Sim |
| [`event`](#evento) | String JSON | Sim |

## Como um código QR é resolvido

Cada código QR é uma ligação curta mais um payload. O conteúdo é transportado por dois campos:

| Campo | O que é |
| - | - |
| `link.url` | Para onde a ligação curta envia quem lê o código. É o destino real em todos os tipos, exceto `wifi`. |
| `data` | O payload do tipo, validado face a `qrType`. Só é guardado tal como foi enviado em `wifi`, `vcard`, `social`, `multilink`, `event` e `sms`. Nos restantes tipos serve apenas para preencher `link.url`, e o `data` guardado passa a ser a ligação curta. Leia o destino em `url` na resposta. |

Regras para todos os tipos:

* **Predefinições.** Na criação, um `link.url` omitido ou vazio passa a ser `data`, e pode omitir todo o objeto `link`. Quando ambos são enviados e são diferentes, prevalece `link.url`. Envie-os iguais ou envie apenas `data`.
* **O que a imagem codifica.** A imagem codifica a ligação curta em todos os tipos, exceto `wifi`. Assim, pode alterar o destino de um código impresso, e as respetivas leituras são registadas. Um código QR WiFi codifica a própria rede: não o pode alterar após a impressão e as leituras não são registadas.
* **Esquemas.** `link.url` só aceita `http:`, `https:`, `wifi:`, `mailto:`, `sms:` e `begin:`. Qualquer outro, incluindo `geo:`, `smsto:`, `matmsg:` e `tel:`, devolve `422 Invalid destination URL`, mesmo quando `data` o aceita.
* **Data vazio.** Um `data` vazio ignora a validação do tipo. Num tipo de redirecionamento, `link.url` tem então de estar definido, caso contrário a chamada devolve `400 Missing destination URL`.
* **Estrutura.** Para além da validação do tipo, o servidor não valida o payload. Um tipo JSON só tem de ser interpretável como objeto JSON, e um vCard só tem de começar por `BEGIN:VCARD`.

> [!TIP]
>
> Os limites marcados como **Editor** são os que o editor do painel aplica. A API aceita payloads que não os respeitam, mas podem ser apresentados de forma estranha na página de destino ou no editor.

## Website

`qrType`: `"website"`. Guia do painel: [Código QR Website](https://docs.getqr.com/pt/qr-types/website.md).

| Campo | Comportamento |
| - | - |
| `data` | Um URL http(s). |
| `link.url` | O destino. Por predefinição, `data`. |
| `fileId` | Não permitido. |
| Codifica | A ligação curta, que redireciona para `link.url`. As leituras são registadas. |
| Após a impressão | Editável. Envie `data` ou `link.url` para mudar o destino. Basta `data`. |

```json Request body theme={null}
{
  "qrType": "website",
  "data": "https://example.com/menu",
  "title": "Menu"
}
```

Erros:

* `422 Expected an http(s) URL, e.g. "https://example.com" for qrType "website".`
* `422 Invalid destination URL`

## Feedback

`qrType`: `"feedback"`. Guia do painel: [Código QR de Feedback](https://docs.getqr.com/pt/qr-types/feedback.md).

`data` é o URL http(s) do formulário de feedback, por exemplo um Google Form ou uma página de avaliações. Tudo o resto funciona como em [Website](#website).

```json Request body theme={null}
{
  "qrType": "feedback",
  "data": "https://forms.gle/abc123"
}
```

## Pagamento

`qrType`: `"payment"`. Guia do painel: [Código QR de Pagamento](https://docs.getqr.com/pt/qr-types/payment.md).

`data` é o URL de pagamento do fornecedor, por exemplo:

```text theme={null}
https://paypal.me/<user>/25EUR
```

O editor do painel reconhece estes domínios: `paypal.me`, `paypal.com/paypalme`, `cash.app`, `venmo.com`, `buy.stripe.com`, `stripe.com`, `square.link` e `payoneer.com`. No PayPal, o montante é o último segmento do caminho. Qualquer outro URL http(s) também funciona, mas o editor não o separa em fornecedor e montante. Tudo o resto funciona como em [Website](#website).

```json Request body theme={null}
{
  "qrType": "payment",
  "data": "https://paypal.me/acme/25EUR"
}
```

## WhatsApp

`qrType`: `"whatsapp"`. Guia do painel: [Código QR WhatsApp](https://docs.getqr.com/pt/qr-types/whatsapp.md).

`data` é uma ligação `wa.me`: o número internacional em dígitos sem `+`, opcionalmente com um texto predefinido.

```text theme={null}
https://wa.me/<digits>
https://wa.me/<digits>?text=<urlencoded>
```

O servidor só verifica se é um URL http(s). O painel também lê ligações `api.whatsapp.com/send`. Tudo o resto funciona como em [Website](#website).

```json Request body theme={null}
{
  "qrType": "whatsapp",
  "data": "https://wa.me/14155550123?text=Hi%20there"
}
```

## Localização

`qrType`: `"location"`. Guia do painel: [Código QR de Localização](https://docs.getqr.com/pt/qr-types/location.md).

`data` é o URL de um mapa. Use este formato para manter o código QR editável no painel (`query_place_id` é opcional):

```text theme={null}
https://www.google.com/maps/search/?api=1&query=<address>&query_place_coords=<lat>,<lng>&query_place_id=<id>
```

Qualquer outro URL http(s) também redireciona. Um URI `geo:` passa a validação de `data`, mas é rejeitado como destino, por isso não o utilize. Tudo o resto funciona como em [Website](#website).

```json Request body theme={null}
{
  "qrType": "location",
  "data": "https://www.google.com/maps/search/?api=1&query=Golden+Gate+Bridge&query_place_coords=37.8199,-122.4783"
}
```

## App Link

`qrType`: `"app"`. Guia do painel: [Código QR de App Link](https://docs.getqr.com/pt/qr-types/app-link.md).

| Campo | Comportamento |
| - | - |
| `link.ios`, `link.android` | URL da App Store e do Google Play. Os visitantes em iOS vão para `ios` e os visitantes em Android para `android`. Prevalecem sobre tudo o resto no momento da leitura. |
| `link.url` | A alternativa para outros dispositivos. Por predefinição, `data` e, na falta deste, `ios` ou `android`. |
| `data` | Um URL http(s) (o painel envia o URL da loja) ou vazio. Pelo menos um de `link.ios`, `link.android`, `link.url` ou `data` tem de estar definido, caso contrário a chamada devolve `400 Missing destination URL`. |
| `fileId` | Não permitido. |
| Codifica | A ligação curta. As leituras são registadas. |
| Após a impressão | Editável. `link.ios` e `link.android` são aplicados de forma independente, cada um só quando enviado. `null` apaga um deles. Não precisa de reenviar `qrType`. Mudar para outro tipo apaga as duas ligações das lojas. |

```json Request body theme={null}
{
  "qrType": "app",
  "data": "https://apps.apple.com/app/id123456789",
  "link": {
    "ios": "https://apps.apple.com/app/id123456789",
    "android": "https://play.google.com/store/apps/details?id=com.acme.app"
  }
}
```

Erros:

* `422 Invalid URL`
* `400 Missing destination URL`

## Email

`qrType`: `"email"`. Guia do painel: [Código QR de Email](https://docs.getqr.com/pt/qr-types/email.md).

```text theme={null}
mailto:<address>?subject=<subject>&body=<body>
```

| Campo | Comportamento |
| - | - |
| `data` | Um URI `mailto:` com assunto e corpo opcionais. Codifique os espaços como `%20`: o painel escreve-os como `+`, que nem todas as aplicações de email leem como espaço. `matmsg:` é rejeitado como destino. |
| `link.url` | O URI `mailto:`. Por predefinição, `data`. |
| `fileId` | Não permitido. |
| Codifica | A ligação curta, que abre uma página que encaminha para a aplicação de email. |
| Após a impressão | Editável. Envie `data` ou `link.url` para alterar a mensagem. Basta `data`. |

```json Request body theme={null}
{
  "qrType": "email",
  "data": "mailto:hi@example.com?subject=Hello&body=Hi%20there"
}
```

Erros:

* `422 Expected a mailto URI, e.g. "mailto:hi@example.com?subject=Hello" for qrType "email".`

## SMS

`qrType`: `"sms"`. Guia do painel: [Código QR de SMS](https://docs.getqr.com/pt/qr-types/sms.md).

```text theme={null}
sms:+<digits>
sms:+<digits>?body=<encodeURIComponent(text)>
```

| Campo | Comportamento |
| - | - |
| `data` | Um URI `sms:` com um corpo opcional. O painel só lê exatamente este formato. `smsto:` é rejeitado como destino. |
| `link.url` | O URI `sms:`. Por predefinição, `data`. |
| `fileId` | Não permitido. |
| Codifica | A ligação curta, que abre uma página que encaminha para a aplicação de mensagens. |
| Após a impressão | Editável. Envie `data` ou `link.url` para alterar a mensagem. Basta `data`. |

```json Request body theme={null}
{
  "qrType": "sms",
  "data": "sms:+14155550123?body=Table%2012"
}
```

Erros:

* `422 Expected an SMS URI, e.g. "sms:+14155550123?body=Hello" for qrType "sms".`

## WiFi

`qrType`: `"wifi"`. Guia do painel: [Código QR WiFi](https://docs.getqr.com/pt/qr-types/wifi.md).

```text theme={null}
WIFI:T:<WPA|WEP|nopass>;S:<ssid>;P:<password>;H:<true|false>;;
```

| Campo | Comportamento |
| - | - |
| `data` | Obrigatório. Mantenha a ordem `T`, `S`, `P`, `H`: o editor e a lista do painel dependem dela. Escape `\`, `;`, `"` e `:` no SSID e na palavra-passe com uma barra invertida. Para uma rede aberta, use `T:nopass` com um `P:` vazio. Os leitores rejeitam `T:none`. **Editor:** SSID obrigatório, palavra-passe com pelo menos 8 caracteres, exceto com `nopass`. |
| `link.url` | Não é usado na leitura. Por predefinição, `data`. |
| `fileId` | Não permitido. |
| Codifica | O payload `WIFI:` em bruto, não a ligação curta. As leituras não são registadas. |
| Após a impressão | **Não editável.** Um novo `data` só altera as transferências futuras. Os códigos impressos mantêm a rede antiga. |

```json Request body theme={null}
{
  "qrType": "wifi",
  "data": "WIFI:T:WPA;S:Cafe Guest;P:espresso42;H:false;;"
}
```

Erros:

* `422 Expected a Wi-Fi payload, e.g. "WIFI:T:WPA;S:MyNetwork;P:secret;H:false;" for qrType "wifi".`

> [!WARNING]
>
> Não mude o tipo de um código QR WiFi já impresso. Os códigos impressos mantêm a rede antiga.

## PDF, imagem e vídeo

`qrType`: `"pdf"`, `"image"` ou `"video"`. Guias do painel: [PDF](https://docs.getqr.com/pt/qr-types/pdf.md), [Image](https://docs.getqr.com/pt/qr-types/image.md), [Video](https://docs.getqr.com/pt/qr-types/video.md).

| Campo | Comportamento |
| - | - |
| `fileId` | O ficheiro. Carregue-o com o target correspondente ao tipo: `pdf`, `image` ou `video`. Com um `fileId`, `link.url` passa a ser o URL do ficheiro, e o que enviar nesse campo é ignorado. |
| `data` | Qualquer coisa exceto o payload de outro tipo (`WIFI:`, `BEGIN:VCARD`, `sms:`, `mailto:`, um objeto JSON). Pode ficar vazio. |
| `link.url` | Sem um `fileId`, `link.url` (ou `data`) é usado como destino externo. Funciona, mas o painel não mostra nenhum ficheiro. |
| Codifica | A ligação curta, que redireciona diretamente para o ficheiro. Um PDF abre como ficheiro simples, não numa página de visualização. |
| Após a impressão | Editável. Envie um novo `fileId` para substituir o ficheiro. O anterior é libertado. |

Um ficheiro por código QR: os conjuntos de PDF e as galerias de imagens não estão disponíveis na API. Consulte [Não suportado na API](#não-suportado-na-api).

```json pdf theme={null}
{
  "qrType": "pdf",
  "data": "",
  "fileId": "file_9f8e7d6c5b4a",
  "title": "Brochure"
}
```

```json image theme={null}
{
  "qrType": "image",
  "data": "",
  "fileId": "file_3c2b1a0f9e8d",
  "title": "Floor plan"
}
```

```json video theme={null}
{
  "qrType": "video",
  "data": "",
  "fileId": "file_5e4d3c2b1a0f",
  "title": "Product demo"
}
```

Para carregar o ficheiro e obter o respetivo `fileId`, consulte [Ficheiros](https://docs.getqr.com/pt/api/endpoints/files.md).

## vCard

`qrType`: `"vcard"`. Guia do painel: [Código QR de vCard](https://docs.getqr.com/pt/qr-types/vcard.md).

| Campo | Comportamento |
| - | - |
| `data` | Obrigatório. Texto vCard 3.0 que começa por `BEGIN:VCARD`, com as linhas separadas por `\r\n` (`\n` também funciona). |
| `fileId` | Imagem de perfil opcional (target `logo`), usada quando `data` não tem uma linha `PHOTO` nem `X-GETQR-IMAGE-FILEID`. |
| `link.url` | Ignorado e substituído pela página alojada. Omita-o. |
| Codifica | A ligação curta, que abre a página de contacto alojada com a transferência do contacto (`.vcf`). |
| Após a impressão | Editável. Envie um novo `data` para atualizar a página. |

A página de destino e o editor só leem os formatos de linha abaixo. Outras variantes, como `TEL;CELL:` ou `EMAIL;TYPE=INTERNET:`, são guardadas, mas não aparecem na página.

* `N:<last>;<first>;;;`: apelido e nome próprio. **Editor:** ambos obrigatórios, até 40 caracteres.
* `FN:<first> <last>`: não é lido pela página. É daqui que vem a etiqueta na lista do painel.
* `ORG:<company>` e `TITLE:<role>`: empresa e cargo. **Editor:** até 40 caracteres.
* `TEL;TYPE=HOME:`, `TEL;TYPE=CELL:`, `TEL;TYPE=WORK:`, `TEL;TYPE=FAX:`: números de telefone, telemóvel, trabalho e fax (`+` e dígitos).
* `EMAIL:<email>`: endereço de email.
* `URL:<url>`: website.
* `NOTE:<text>`: resumo. Escape `\\`, `\n`, `\;` e `\,`. **Editor:** até 200 caracteres.
* `ADR:;;<street>;<city>;<state>;<zip>;<country>`: morada.
* `X-SOCIALPROFILE;TYPE=<platform>:<url>` ou `URL;TYPE=<PLATFORM>:<url>`: ligações para redes sociais, uma linha por plataforma.
* `PHOTO;VALUE=URI:<url>`: URL da imagem de perfil. Prevalece sobre qualquer ID de ficheiro.
* `X-GETQR-IMAGE-FILEID:<fileId>`: imagem de perfil (target `logo`).
* `X-GETQR-PAGE-LOGO-FILEID:<fileId>`: logótipo da página (target `logo`).
* `X-GETQR-LANDING-THEME:p|<0-4>` ou `X-GETQR-LANDING-THEME:c|#RRGGBB|#RRGGBB|#RRGGBB`: tema da página, seja um índice de predefinição (de 0 a 4) ou cores personalizadas de fundo, botões e ícones.

Redes sociais: `facebook`, `whatsapp`, `instagram`, `youtube`, `tiktok`, `messenger`, `snapchat`, `linkedin`, `x`, `reddit`, `pinterest`, `telegram`, `wechat`, `viber`, `line`.

```json Request body theme={null}
{
  "qrType": "vcard",
  "data": "BEGIN:VCARD\r\nVERSION:3.0\r\nN:Doe;Jane;;;\r\nFN:Jane Doe\r\nORG:Acme\r\nTITLE:CTO\r\nTEL;TYPE=CELL:+14155550123\r\nEMAIL:jane@acme.com\r\nURL:https://acme.com\r\nX-GETQR-LANDING-THEME:p|0\r\nEND:VCARD",
  "title": "Jane Doe"
}
```

Erros:

* `422 Expected a vCard payload starting with "BEGIN:VCARD" for qrType "vcard".`

## Social Media

`qrType`: `"social"`. Guia do painel: [Código QR Social Media](https://docs.getqr.com/pt/qr-types/social.md).

| Campo | Comportamento |
| - | - |
| `data` | Obrigatório. Uma string JSON que codifica um objeto. Crie-a com `JSON.stringify`. |
| `fileId` | Imagem de perfil opcional no nível superior (target `logo`). |
| `link.url` | Ignorado e substituído pela página alojada. Omita-o. |
| Codifica | A ligação curta, que abre a página de redes sociais alojada. |
| Após a impressão | Editável. Envie um novo `data` para atualizar a página. |

Campos em `data`:

| Campo | Tipo | Notas |
| - | - | - |
| `firstName` | string | Título da página e único nome apresentado. **Editor:** obrigatório, até 40. |
| `lastName` | string | Até 40. Não é apresentado na página. |
| `summary` | string | Até 200. |
| `socialLinks` | `{ platform, url }[]` | `platform` é uma das [redes sociais do vCard](#vcard). **Editor:** cada plataforma uma única vez. |
| `customItems` | `{ name, url, logoFileId }[]` | **Editor:** `name` até 40, um `url` http(s) e um `logoFileId`. No total, pelo menos uma ligação social ou um item personalizado. |
| `fileId` | string | Imagem de perfil (target `logo`). O `fileId` do nível superior serve de alternativa. |
| `imageUrl` | string | URL externo da imagem de perfil, usado apenas quando não há ID de ficheiro. |
| `pageLogoFileId` | string | Logótipo da página (target `logo`). |
| `landingThemeMode` | `"preset" \| "custom"` | Por predefinição, `preset`. |
| `landingPresetIndex` | 0–4 | Por predefinição, 0. |
| `landingCustomBg`, `landingCustomButton`, `landingCustomIcon` | `#RRGGBB` | Usados quando o modo é `custom`. |

```json Request body theme={null}
{
  "qrType": "social",
  "data": "{\"firstName\":\"Acme Coffee\",\"summary\":\"Follow us\",\"socialLinks\":[{\"platform\":\"instagram\",\"url\":\"https://instagram.com/acme\"}],\"customItems\":[]}"
}
```

Erros:

* `422 Expected a JSON object describing the social profile page for qrType "social".`

## Multi-Link

`qrType`: `"multilink"`. Guia do painel: [Código QR de Multi-Link](https://docs.getqr.com/pt/qr-types/multi-link.md).

| Campo | Comportamento |
| - | - |
| `data` | Obrigatório. Uma string JSON que codifica um objeto. |
| `fileId` | Imagem de perfil opcional no nível superior (target `logo`). |
| `link.url` | Ignorado e substituído pela página alojada. Omita-o. |
| Codifica | A ligação curta, que abre a página de várias ligações alojada. |
| Após a impressão | Editável. Envie um novo `data` para atualizar a página. |

Os campos em `data` são os de [Social Media](#social-media), exceto que `firstName`, `lastName` e `summary` são substituídos por:

| Campo | Tipo | Notas |
| - | - | - |
| `title` | string | Título da página. **Editor:** obrigatório, até 40. |
| `description` | string | Até 200. |

Em `customItems`, `logoFileId` é opcional: é apresentado um ícone alternativo. **Editor:** pelo menos uma ligação social ou um item personalizado não vazio.

```json Request body theme={null}
{
  "qrType": "multilink",
  "data": "{\"title\":\"Acme links\",\"description\":\"Everything in one place\",\"socialLinks\":[],\"customItems\":[{\"name\":\"Shop\",\"url\":\"https://acme.com/shop\",\"logoFileId\":\"\"}]}"
}
```

Erros:

* `422 Expected a JSON object describing the multi-link page for qrType "multilink".`

## Evento

`qrType`: `"event"`. Guia do painel: [Código QR de Evento](https://docs.getqr.com/pt/qr-types/event.md).

| Campo | Comportamento |
| - | - |
| `data` | Obrigatório. Uma string JSON que codifica um objeto. Os valores desconhecidos ou inválidos são substituídos pelos valores predefinidos. |
| `fileId` | É validado (target `logo`) e guardado, mas a página do evento só lê a capa a partir de `data.fileId`. Coloque o ID da capa no payload. |
| `link.url` | Ignorado e substituído pela página alojada. Omita-o. |
| Codifica | A ligação curta, que abre a página do evento alojada com a transferência de um ficheiro `.ics`. |
| Após a impressão | Editável. Envie um novo `data` para atualizar a página. |

Campos em `data`:

| Campo | Tipo | Notas |
| - | - | - |
| `name` | string | **Editor:** obrigatório. |
| `eventType` | string | Um dos tipos de evento abaixo, ou vazio. |
| `start`, `end` | `"YYYY-MM-DDTHH:mm"` | Hora local no fuso `timezone`. **Editor:** ambos obrigatórios, fim depois do início. |
| `timezone` | IANA, por exemplo `"Europe/Berlin"` | Situa o início e o fim no ficheiro `.ics`. Envie-o sempre: com um fuso vazio ou desconhecido, o `.ics` trata as horas como UTC. |
| `street`, `zip`, `city`, `state`, `country` | string | **Editor:** `city` e `country` obrigatórios, até 40 cada. |
| `facilities` | string\[] | IDs da lista abaixo. Os IDs desconhecidos são descartados. |
| `notes` | string | Texto livre. |
| `fileId` | string | Imagem de capa (target `logo`). |
| `pageLogoFileId` | string | Logótipo da página (target `logo`). |
| `organizerName`, `organizerEmail`, `mobile`, `work` | string | `mobile` e `work` até 40. |
| `socialLinks` | `{ platform, url }[]` | As [redes sociais do vCard](#vcard), mais `website`. |
| `ticketsUrl` | URL http(s) | Ligação para comprar bilhetes. |
| `ticketsLabel` | string | Até 20 caracteres. As etiquetas mais longas são cortadas. Se ficar vazio, é apresentada a etiqueta predefinida. |

> [accordion] Tipos de evento
>
> `conference`, `seminar`, `workshop`, `training`, `webinar`, `meetup`, `networking`, `corporateEvent`, `productLaunch`, `tradeShow`, `jobFair`, `fundraiser`, `charity`, `wedding`, `engagement`, `birthday`, `anniversary`, `babyShower`, `graduation`, `reunion`, `party`, `religious`, `funeralMemorial`, `ceremony`, `concert`, `festival`, `clubNight`, `theater`, `comedy`, `filmScreening`, `exhibition`, `sports`, `tournament`, `raceMarathon`, `fitnessClass`, `foodDrink`, `market`, `openHouse`, `community`, `schoolEvent`, `kids`, `travelTour`

> [accordion] Instalações
>
> | Grupo | IDs |
> | - | - |
> | Entrada | `freeEntry`, `idRequired`, `invitationOnly`, `plusOneAllowed`, `reEntryAllowed` |
> | Idade (escolha uma) | `adultsOnly`, `age18Plus`, `age21Plus`, `kidsWelcome` |
> | No local | `parking`, `publicTransport`, `shuttle`, `wheelchairAccess`, `evCharging`, `wifi`, `foodDrinks`, `alcoholServed`, `atm`, `coatCheck`, `pool`, `phoneCharging`, `firstAid`, `wc` |
> | Regras | `petsAllowed`, `noPets`, `smokingArea`, `noSmoking`, `noPhotos` |
> | Código de vestuário (escolha um) | `dressCasual`, `dressSmartCasual`, `dressBusiness`, `dressCocktail`, `dressThemed` |

```json Request body theme={null}
{
  "qrType": "event",
  "data": "{\"name\":\"Launch party\",\"eventType\":\"productLaunch\",\"start\":\"2026-11-20T18:00\",\"end\":\"2026-11-20T22:00\",\"timezone\":\"Europe/Berlin\",\"city\":\"Berlin\",\"country\":\"Germany\",\"facilities\":[\"freeEntry\"],\"socialLinks\":[],\"ticketsUrl\":\"https://acme.com/tickets\"}"
}
```

Erros:

* `422 Expected a JSON object describing the event page for qrType "event".`

## Ficheiros em códigos QR

Registe um ficheiro com [Ficheiros](https://docs.getqr.com/pt/api/endpoints/files.md), carregue-o e depois passe o respetivo `fileId`. Use o target que corresponde à utilização:

* **`pdf`, `image`, `video`.** O conteúdo de um código QR de PDF, imagem ou vídeo.
* **`logo`.** Imagens de perfil, logótipos de página, ícones de ligações personalizadas e logótipos centrais.

Os ficheiros que nunca são associados a um código QR são eliminados após um período de tolerância.

Erros de `fileId`, devolvidos na criação e em `PATCH` quando `fileId` é enviado:

| Estado | Causa |
| - | - |
| `422 unprocessable_entity` | O tipo não aceita ficheiros. Só `pdf`, `image`, `video`, `vcard`, `social`, `multilink` e `event` aceitam um. |
| `404 not_found` | Não existe nenhum ficheiro com este ID. Registe-o primeiro com `POST /api/v1/files`. |
| `422 unprocessable_entity` | O ficheiro foi carregado para outro target. Por exemplo, um carregamento `image` num código QR de PDF, ou um carregamento `pdf`, `image` ou `video` usado como fotografia de um vCard. |
| `422 unprocessable_entity` | O ficheiro está registado, mas o carregamento para `uploadUrl` nunca foi concluído. |

Os IDs de ficheiro dentro de um payload (`fileId`, `pageLogoFileId`, `customItems[].logoFileId`, linhas `X-GETQR-*-FILEID`) não são validados. Só são apresentados se tiverem sido carregados com o target `logo`. O código QR reclama-os, pelo que a limpeza não lhes toca.

## Mudar de tipo

Pode alterar `qrType` com [Atualizar um código QR](https://docs.getqr.com/pt/api/endpoints/qr-codes.md#atualizar-um-código-qr). Envie um `data` que corresponda ao novo tipo: o payload guardado pertence ao tipo antigo, por isso uma mudança sem ele é rejeitada.

Após uma atualização, o destino é resolvido por esta ordem:

1. `vcard`, `social`, `multilink`, `event`: sempre a página alojada.
2. Um conjunto de PDF ou uma galeria de imagens criados no painel: a respetiva página de destino.
3. `pdf`, `image`, `video`: o URL do ficheiro (um novo `fileId` ou, na falta deste, o guardado).
4. `link.url`, quando enviado.
5. O `data` alterado.
6. O URL guardado.

O que faz cada mudança:

* **Ao sair de `pdf`, `image` ou `video`.** `fileId` e qualquer conjunto ou galeria são apagados.
* **Ao passar para `pdf`, `image` ou `video`.** Envie também `fileId`, caso contrário é reutilizado o guardado, que pode ser a fotografia de um vCard.
* **Ao sair de `app`.** O nome da aplicação, `link.ios` e `link.android` são apagados, pelo que os telemóveis passam a seguir o novo destino.
* **Ao passar para `wifi`.** A imagem passa a usar o payload em bruto. Os códigos já impressos continuam a conter a ligação curta, que agora redireciona para um URL `wifi:`.
* **Ao sair de `wifi`.** Os códigos impressos mantêm a rede antiga.
* **Ao passar para `vcard`, `social`, `multilink` ou `event`.** A ligação curta passa a apontar para a nova página alojada.
* **Ao sair de `vcard`, `social`, `multilink` ou `event`.** Envie o novo `data`. O destino acompanha-o.

Os códigos QR estáticos criados no painel não têm ligação curta, pelo que alterar o respetivo `link.url` devolve `422`.

## Não suportado na API

Estas funcionalidades do painel não fazem parte da API v1. Os campos desconhecidos são descartados sem erro, pelo que enviá-los não tem qualquer efeito.

| Campo | Descrição |
| - | - |
| `appName` | O nome apresentado de um código QR de App Link. Os códigos QR de App Link criados através da API mostram o URL da loja na lista do painel. |
| `isStatic` | Um código QR estático sem ligação curta. Todos os códigos QR criados pela API têm uma, pelo que podem ser editados e acompanhados após a impressão (exceto `wifi`). |
| `pdfBundle` | Um código QR PDF com dois ou mais ficheiros. A API só cria códigos QR PDF com um único ficheiro. |
| `imageGallery` | Um código QR Image com duas ou mais imagens. A API só cria códigos QR com uma única imagem. |

Os conjuntos e as galerias criados no painel podem continuar a ser consultados, colocados em pausa e eliminados através da API, mas os respetivos ficheiros não podem ser alterados através dela.

## Problemas comuns

> [accordion] 422 Invalid destination URL
>
> `link.url` usa um esquema para o qual a ligação curta não pode redirecionar, como `geo:`, `smsto:`, `matmsg:` ou `tel:`. Use os formatos desta página.

> [accordion] 400 Missing destination URL
>
> `data` está vazio e não existe `link.url`. Em `app`, defina pelo menos um de `link.ios`, `link.android`, `link.url` ou `data`.

> [accordion] Na resposta, data é uma ligação curta e não o meu URL
>
> Nos tipos de ligação, o `data` guardado é a ligação curta. Leia o destino em `url`.

> [accordion] Faltam na página de destino dados do meu payload
>
> A página só lê os campos e os formatos de linha indicados para o tipo. Os outros campos são guardados, mas não são apresentados.

## Próximos passos

> [card] [Códigos QR](https://docs.getqr.com/pt/api/endpoints/qr-codes.md)

> [card] [Ficheiros](https://docs.getqr.com/pt/api/endpoints/files.md)

> [card] [Personalização](https://docs.getqr.com/pt/api/guides/customization.md)

> [card] [Regras de acesso](https://docs.getqr.com/pt/api/guides/access-rules.md)


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