> ## 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.

# QR-koodien data tyypeittäin

> Datan muoto, esimerkkipyyntö ja painamisen jälkeinen muokattavuus kullekin 16 QR-koodityypistä.

> [!NOTE]
>
> GetQR API on beetavaiheessa, ja se on käytettävissä valituissa työtiloissa. Yksityiskohdat voivat muuttua ennen yleistä julkaisua.

Jokaisella QR-koodilla on `qrType`, ja tyyppi määrää, mitä `data`-kentän on sisällettävä. Tässä oppaassa on jokaisen tyypin muoto, toimiva pyynnön runko ja se, mitä voit vielä muuttaa koodin painamisen jälkeen.

Esimerkit ovat pyyntöjen runkoja [QR-koodin luontiin](https://docs.getqr.com/fi/api/endpoints/qr-codes.md#luo-qr-koodi). Lähetä ne näin:

```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" }'
```

## Kaikki tyypit yhdellä silmäyksellä

| `qrType` | `data` | Muokattavissa painamisen jälkeen |
| - | - | - |
| [`website`](#website) | http(s)-URL | Kyllä |
| [`feedback`](#feedback) | Lomakkeen http(s)-URL | Kyllä |
| [`payment`](#payment) | Maksupalvelun URL | Kyllä |
| [`whatsapp`](#whatsapp) | `wa.me`-linkki | Kyllä |
| [`location`](#location) | Kartan URL | Kyllä |
| [`app`](#app-link) | Sovelluskaupan URL tai tyhjä sekä `link.ios` / `link.android` | Kyllä |
| [`email`](#email) | `mailto:`-URI | Kyllä |
| [`sms`](#sms) | `sms:`-URI | Kyllä |
| [`wifi`](#wifi) | `WIFI:`-kuorma | **Ei** |
| [`pdf`, `image`, `video`](#pdf-image-ja-video) | Tyhjä, ja lisäksi `fileId` | Kyllä |
| [`vcard`](#vcard) | vCard 3.0 -teksti | Kyllä |
| [`social`](#social-media) | JSON-merkkijono | Kyllä |
| [`multilink`](#multi-link) | JSON-merkkijono | Kyllä |
| [`event`](#event) | JSON-merkkijono | Kyllä |

## Miten QR-koodi ohjautuu

Jokainen QR-koodi on lyhytlinkki ja kuorma. Sisältö kulkee kahdessa kentässä:

| Kenttä | Mikä se on |
| - | - |
| `link.url` | Minne lyhytlinkki vie kävijän. Tämä on todellinen kohde kaikilla tyypeillä paitsi `wifi`. |
| `data` | Tyypin kuorma, joka tarkistetaan `qrType`-arvoa vasten. Se tallennetaan sellaisenaan vain tyypeillä `wifi`, `vcard`, `social`, `multilink`, `event` ja `sms`. Kaikilla muilla tyypeillä se antaa vain arvon `link.url`, ja tallennetusta `data`-arvosta tulee lyhytlinkki. Lue kohde vastauksen `url`-kentästä. |

Säännöt kaikille tyypeille:

* **Oletukset.** Luonnissa pois jätetystä tai tyhjästä `link.url`-arvosta tulee `data`, ja voit jättää koko `link`-objektin pois. Jos molemmat lähetetään ja ne eroavat, `link.url` voittaa. Lähetä ne samanlaisina tai lähetä vain `data`.
* **Mitä kuva koodaa.** Kuva koodaa lyhytlinkin kaikilla tyypeillä paitsi `wifi`. Siksi voit muuttaa, minne painettu koodi vie, ja sen skannauksia seurataan. WiFi-QR-koodi koodaa itse verkon: sitä ei voi muuttaa painamisen jälkeen, eikä sen skannauksia seurata.
* **Skeemat.** `link.url` hyväksyy vain skeemat `http:`, `https:`, `wifi:`, `mailto:`, `sms:` ja `begin:`. Kaikki muut, myös `geo:`, `smsto:`, `matmsg:` ja `tel:`, saavat vastauksen `422 Invalid destination URL`, vaikka `data` hyväksyisi ne.
* **Tyhjä data.** Tyhjä `data` ohittaa tyyppitarkistuksen. Uudelleenohjaavalla tyypillä `link.url` on silloin asetettava, tai kutsu saa vastauksen `400 Missing destination URL`.
* **Rakenne.** Tyyppitarkistuksen lisäksi palvelin ei validoi kuormaa. JSON-tyypin tarvitsee vain jäsentyä JSON-objektiksi, ja vCardin tarvitsee vain alkaa merkkijonolla `BEGIN:VCARD`.

> [!TIP]
>
> Alla merkinnällä **Editori** merkityt rajat ovat hallintapaneelin editorin rajoja. API hyväksyy kuormat, jotka eivät noudata niitä, mutta ne voivat näkyä oudosti laskeutumissivulla tai editorissa.

## Website

`qrType`: `"website"`. Hallintapaneelin opas: [Website-QR-koodi](https://docs.getqr.com/fi/qr-types/website.md).

| Kenttä | Toiminta |
| - | - |
| `data` | http(s)-URL. |
| `link.url` | Kohde. Oletus on `data`. |
| `fileId` | Ei sallittu. |
| Koodaa | Lyhytlinkin, joka ohjaa osoitteeseen `link.url`. Skannauksia seurataan. |
| Painamisen jälkeen | Muokattavissa. Siirrä kohdetta lähettämällä `data` tai `link.url`. Pelkkä `data` riittää. |

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

Virheet:

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

## Feedback

`qrType`: `"feedback"`. Hallintapaneelin opas: [Palaute-QR-koodi](https://docs.getqr.com/fi/qr-types/feedback.md).

`data` on palautelomakkeen http(s)-URL, esimerkiksi Google-lomake tai arvostelusivu. Kaikki muu toimii kuten tyypillä [Website](#website).

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

## Payment

`qrType`: `"payment"`. Hallintapaneelin opas: [Maksu-QR-koodi](https://docs.getqr.com/fi/qr-types/payment.md).

`data` on palveluntarjoajan maksu-URL, esimerkiksi:

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

Hallintapaneelin editori tunnistaa nämä verkkotunnukset: `paypal.me`, `paypal.com/paypalme`, `cash.app`, `venmo.com`, `buy.stripe.com`, `stripe.com`, `square.link` ja `payoneer.com`. PayPalissa summa on polun viimeinen osa. Mikä tahansa muu http(s)-URL toimii myös, mutta editori ei erottele siitä palveluntarjoajaa ja summaa. Kaikki muu toimii kuten tyypillä [Website](#website).

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

## WhatsApp

`qrType`: `"whatsapp"`. Hallintapaneelin opas: [WhatsApp-QR-koodi](https://docs.getqr.com/fi/qr-types/whatsapp.md).

`data` on `wa.me`-linkki: kansainvälinen numero pelkkinä numeroina ilman `+`-merkkiä, valinnaisesti esitäytetyllä tekstillä.

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

Palvelin tarkistaa vain, että kyseessä on http(s)-URL. Hallintapaneeli lukee myös `api.whatsapp.com/send`-linkit. Kaikki muu toimii kuten tyypillä [Website](#website).

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

## Location

`qrType`: `"location"`. Hallintapaneelin opas: [Sijainti-QR-koodi](https://docs.getqr.com/fi/qr-types/location.md).

`data` on kartan URL. Käytä tätä muotoa, jotta QR-koodi pysyy muokattavana hallintapaneelissa (`query_place_id` on valinnainen):

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

Myös mikä tahansa muu http(s)-URL ohjaa perille. `geo:`-URI läpäisee `data`-tarkistuksen, mutta se hylätään kohteena, joten älä käytä sitä. Kaikki muu toimii kuten tyypillä [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"`. Hallintapaneelin opas: [Sovelluslinkin QR-koodi](https://docs.getqr.com/fi/qr-types/app-link.md).

| Kenttä | Toiminta |
| - | - |
| `link.ios`, `link.android` | App Storen ja Google Playn URL-osoitteet. iOS-kävijät ohjataan osoitteeseen `ios`, Android-kävijät osoitteeseen `android`. Nämä voittavat skannaushetkellä kaiken muun. |
| `link.url` | Varakohde muille laitteille. Oletus on `data`, sen jälkeen `ios` tai `android`. |
| `data` | http(s)-URL (hallintapaneeli lähettää sovelluskaupan URL:n) tai tyhjä. Vähintään yksi kentistä `link.ios`, `link.android`, `link.url` tai `data` on asetettava, tai kutsu saa vastauksen `400 Missing destination URL`. |
| `fileId` | Ei sallittu. |
| Koodaa | Lyhytlinkin. Skannauksia seurataan. |
| Painamisen jälkeen | Muokattavissa. `link.ios` ja `link.android` käsitellään toisistaan riippumatta, kumpikin vain, jos se lähetetään. `null` tyhjentää kentän. `qrType`-arvoa ei tarvitse lähettää uudelleen. Vaihto toiseen tyyppiin tyhjentää molemmat sovelluskauppalinkit. |

```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"
  }
}
```

Virheet:

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

## Email

`qrType`: `"email"`. Hallintapaneelin opas: [Sähköposti-QR-koodi](https://docs.getqr.com/fi/qr-types/email.md).

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

| Kenttä | Toiminta |
| - | - |
| `data` | `mailto:`-URI, jossa voi olla aihe ja viestiteksti. Koodaa välilyönnit muodossa `%20`: hallintapaneeli kirjoittaa ne merkkinä `+`, jota kaikki sähköpostisovellukset eivät lue välilyönniksi. `matmsg:` hylätään kohteena. |
| `link.url` | `mailto:`-URI. Oletus on `data`. |
| `fileId` | Ei sallittu. |
| Koodaa | Lyhytlinkin, joka avaa sivun, josta kävijä siirtyy sähköpostisovellukseen. |
| Painamisen jälkeen | Muokattavissa. Muuta viestiä lähettämällä `data` tai `link.url`. Pelkkä `data` riittää. |

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

Virheet:

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

## SMS

`qrType`: `"sms"`. Hallintapaneelin opas: [SMS-QR-koodi](https://docs.getqr.com/fi/qr-types/sms.md).

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

| Kenttä | Toiminta |
| - | - |
| `data` | `sms:`-URI, jossa voi olla viestiteksti. Hallintapaneeli lukee vain täsmälleen tämän muodon. `smsto:` hylätään kohteena. |
| `link.url` | `sms:`-URI. Oletus on `data`. |
| `fileId` | Ei sallittu. |
| Koodaa | Lyhytlinkin, joka avaa sivun, josta kävijä siirtyy viestisovellukseen. |
| Painamisen jälkeen | Muokattavissa. Muuta viestiä lähettämällä `data` tai `link.url`. Pelkkä `data` riittää. |

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

Virheet:

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

## WiFi

`qrType`: `"wifi"`. Hallintapaneelin opas: [WiFi-QR-koodi](https://docs.getqr.com/fi/qr-types/wifi.md).

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

| Kenttä | Toiminta |
| - | - |
| `data` | Pakollinen. Säilytä järjestys `T`, `S`, `P`, `H`: hallintapaneelin editori ja lista ovat siitä riippuvaisia. Suojaa SSID:ssä ja salasanassa merkit `\`, `;`, `"` ja `:` kenoviivalla. Käytä avoimelle verkolle arvoa `T:nopass` ja tyhjää `P:`-kenttää. Skannerit hylkäävät arvon `T:none`. **Editori:** SSID pakollinen, salasana vähintään 8 merkkiä, ellei `nopass`. |
| `link.url` | Ei käytetä skannauksessa. Oletus on `data`. |
| `fileId` | Ei sallittu. |
| Koodaa | Raa'an `WIFI:`-kuorman, ei lyhytlinkkiä. Skannauksia ei seurata. |
| Painamisen jälkeen | **Ei muokattavissa.** Uusi `data` muuttaa vain tulevat lataukset. Painetuissa koodeissa on edelleen vanha verkko. |

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

Virheet:

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

> [!WARNING]
>
> Älä vaihda painetun WiFi-QR-koodin tyyppiä. Painetuissa koodeissa säilyy vanha verkko.

## PDF, Image ja Video

`qrType`: `"pdf"`, `"image"` tai `"video"`. Hallintapaneelin oppaat: [PDF](https://docs.getqr.com/fi/qr-types/pdf.md), [Image](https://docs.getqr.com/fi/qr-types/image.md), [Video](https://docs.getqr.com/fi/qr-types/video.md).

| Kenttä | Toiminta |
| - | - |
| `fileId` | Tiedosto. Lataa se tyyppiä vastaavalla targetilla: `pdf`, `image` tai `video`. Kun `fileId` on annettu, `link.url`-arvoksi tulee tiedoston URL, ja kaikki siinä lähettämäsi ohitetaan. |
| `data` | Mitä tahansa paitsi toisen tyypin kuorma (`WIFI:`, `BEGIN:VCARD`, `sms:`, `mailto:`, JSON-objekti). Tyhjä käy. |
| `link.url` | Ilman `fileId`-arvoa `link.url` (tai `data`) toimii ulkoisena kohteena. Se toimii, mutta hallintapaneeli ei näytä tiedostoa. |
| Koodaa | Lyhytlinkin, joka ohjaa suoraan tiedostoon. PDF avautuu raakatiedostona, ei katselusivulla. |
| Painamisen jälkeen | Muokattavissa. Vaihda tiedosto lähettämällä uusi `fileId`. Vanha tiedosto vapautetaan. |

Yksi tiedosto QR-koodia kohti: PDF-niput ja kuvagalleriat eivät ole käytettävissä API:n kautta. Katso [Ominaisuudet, joita API ei tue](#ominaisuudet-joita-api-ei-tue).

```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"
}
```

Tiedoston lataaminen ja sen `fileId`-tunnuksen hakeminen on kuvattu kohdassa [Tiedostot](https://docs.getqr.com/fi/api/endpoints/files.md).

## vCard

`qrType`: `"vcard"`. Hallintapaneelin opas: [vCard-QR-koodi](https://docs.getqr.com/fi/qr-types/vcard.md).

| Kenttä | Toiminta |
| - | - |
| `data` | Pakollinen. vCard 3.0 -teksti, joka alkaa merkkijonolla `BEGIN:VCARD`, rivit erotettuina merkeillä `\r\n` (myös `\n` toimii). |
| `fileId` | Valinnainen profiilikuva (target `logo`), jota käytetään, kun `data`-kentässä ei ole `PHOTO`- tai `X-GETQR-IMAGE-FILEID`-riviä. |
| `link.url` | Ohitetaan ja korvataan isännöidyllä sivulla. Jätä se pois. |
| Koodaa | Lyhytlinkin, joka avaa isännöidyn yhteystietosivun, josta yhteystiedon voi tallentaa (`.vcf`-lataus). |
| Painamisen jälkeen | Muokattavissa. Päivitä sivu lähettämällä uusi `data`. |

Laskeutumissivu ja editori lukevat vain alla olevat rivimuodot. Muut muunnelmat, kuten `TEL;CELL:` tai `EMAIL;TYPE=INTERNET:`, tallennetaan, mutta ne eivät näy sivulla.

* `N:<last>;<first>;;;`: suku- ja etunimi. **Editori:** molemmat pakollisia, enintään 40 merkkiä.
* `FN:<first> <last>`: sivu ei lue tätä. Hallintapaneelin listan nimi tulee siitä.
* `ORG:<company>` ja `TITLE:<role>`: yritys ja rooli. **Editori:** enintään 40 merkkiä.
* `TEL;TYPE=HOME:`, `TEL;TYPE=CELL:`, `TEL;TYPE=WORK:`, `TEL;TYPE=FAX:`: puhelin-, matkapuhelin-, työ- ja faksinumerot (`+` ja numerot).
* `EMAIL:<email>`: sähköpostiosoite.
* `URL:<url>`: verkkosivusto.
* `NOTE:<text>`: esittely. Suojaa merkit `\\`, `\n`, `\;` ja `\,`. **Editori:** enintään 200 merkkiä.
* `ADR:;;<street>;<city>;<state>;<zip>;<country>`: osoite.
* `X-SOCIALPROFILE;TYPE=<platform>:<url>` tai `URL;TYPE=<PLATFORM>:<url>`: some-linkit, yksi rivi alustaa kohti.
* `PHOTO;VALUE=URI:<url>`: profiilikuvan URL. Menee minkä tahansa tiedostotunnuksen edelle.
* `X-GETQR-IMAGE-FILEID:<fileId>`: profiilikuva (target `logo`).
* `X-GETQR-PAGE-LOGO-FILEID:<fileId>`: sivun logo (target `logo`).
* `X-GETQR-LANDING-THEME:p|<0-4>` tai `X-GETQR-LANDING-THEME:c|#RRGGBB|#RRGGBB|#RRGGBB`: laskeutumissivun teema, joko valmisteeman indeksi (0–4) tai omat taustan, painikkeiden ja kuvakkeiden värit.

Some-alustat: `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"
}
```

Virheet:

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

## Social Media

`qrType`: `"social"`. Hallintapaneelin opas: [Social Media -QR-koodi](https://docs.getqr.com/fi/qr-types/social.md).

| Kenttä | Toiminta |
| - | - |
| `data` | Pakollinen. JSON-merkkijono, joka koodaa objektin. Muodosta se funktiolla `JSON.stringify`. |
| `fileId` | Valinnainen ylätason profiilikuva (target `logo`). |
| `link.url` | Ohitetaan ja korvataan isännöidyllä sivulla. Jätä se pois. |
| Koodaa | Lyhytlinkin, joka avaa isännöidyn some-sivun. |
| Painamisen jälkeen | Muokattavissa. Päivitä sivu lähettämällä uusi `data`. |

Kentät `data`-objektissa:

| Kenttä | Tyyppi | Huomiot |
| - | - | - |
| `firstName` | string | Sivun otsikko ja ainoa näytettävä nimi. **Editori:** pakollinen, enintään 40. |
| `lastName` | string | Enintään 40. Ei näy sivulla. |
| `summary` | string | Enintään 200. |
| `socialLinks` | `{ platform, url }[]` | `platform` on jokin [vCardin some-alustoista](#vcard). **Editori:** kukin alusta kerran. |
| `customItems` | `{ name, url, logoFileId }[]` | **Editori:** `name` enintään 40, http(s)-muotoinen `url` ja `logoFileId`. Yhteensä vähintään yksi some-linkki tai oma kohde. |
| `fileId` | string | Profiilikuva (target `logo`). Ylätason `fileId` on varavaihtoehto. |
| `imageUrl` | string | Ulkoinen profiilikuvan URL, jota käytetään vain, jos tiedostotunnusta ei ole. |
| `pageLogoFileId` | string | Sivun logo (target `logo`). |
| `landingThemeMode` | `"preset" \| "custom"` | Oletus on `preset`. |
| `landingPresetIndex` | 0–4 | Oletus on 0. |
| `landingCustomBg`, `landingCustomButton`, `landingCustomIcon` | `#RRGGBB` | Käytetään, kun tila on `custom`. |

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

Virheet:

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

## Multi-Link

`qrType`: `"multilink"`. Hallintapaneelin opas: [Multi-Link-QR-koodi](https://docs.getqr.com/fi/qr-types/multi-link.md).

| Kenttä | Toiminta |
| - | - |
| `data` | Pakollinen. JSON-merkkijono, joka koodaa objektin. |
| `fileId` | Valinnainen ylätason profiilikuva (target `logo`). |
| `link.url` | Ohitetaan ja korvataan isännöidyllä sivulla. Jätä se pois. |
| Koodaa | Lyhytlinkin, joka avaa isännöidyn monilinkkisivun. |
| Painamisen jälkeen | Muokattavissa. Päivitä sivu lähettämällä uusi `data`. |

`data`-objektin kentät ovat samat kuin tyypillä [Social Media](#social-media), paitsi että `firstName`, `lastName` ja `summary` korvataan näillä:

| Kenttä | Tyyppi | Huomiot |
| - | - | - |
| `title` | string | Sivun otsikko. **Editori:** pakollinen, enintään 40. |
| `description` | string | Enintään 200. |

`customItems`-kohteissa `logoFileId` on valinnainen: sen puuttuessa näytetään varakuvake. **Editori:** vähintään yksi some-linkki tai yksi ei-tyhjä oma kohde.

```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\":\"\"}]}"
}
```

Virheet:

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

## Event

`qrType`: `"event"`. Hallintapaneelin opas: [Tapahtuma-QR-koodi](https://docs.getqr.com/fi/qr-types/event.md).

| Kenttä | Toiminta |
| - | - |
| `data` | Pakollinen. JSON-merkkijono, joka koodaa objektin. Tuntemattomat tai virheelliset arvot korvataan oletusarvoilla. |
| `fileId` | Validoidaan (target `logo`) ja tallennetaan, mutta tapahtumasivu lukee kansikuvansa vain kentästä `data.fileId`. Laita kansikuvan tunnus kuormaan. |
| `link.url` | Ohitetaan ja korvataan isännöidyllä sivulla. Jätä se pois. |
| Koodaa | Lyhytlinkin, joka avaa isännöidyn tapahtumasivun ja `.ics`-latauksen. |
| Painamisen jälkeen | Muokattavissa. Päivitä sivu lähettämällä uusi `data`. |

Kentät `data`-objektissa:

| Kenttä | Tyyppi | Huomiot |
| - | - | - |
| `name` | string | **Editori:** pakollinen. |
| `eventType` | string | Jokin alla olevista tapahtumatyypeistä tai tyhjä. |
| `start`, `end` | `"YYYY-MM-DDTHH:mm"` | Paikallinen kellonaika aikavyöhykkeellä `timezone`. **Editori:** molemmat pakollisia, loppu alun jälkeen. |
| `timezone` | IANA, esimerkiksi `"Europe/Berlin"` | Sijoittaa alun ja lopun `.ics`-tiedostossa. Lähetä se aina: tyhjällä tai tuntemattomalla vyöhykkeellä `.ics` tulkitsee ajat UTC-ajaksi. |
| `street`, `zip`, `city`, `state`, `country` | string | **Editori:** `city` ja `country` pakollisia, kumpikin enintään 40. |
| `facilities` | string\[] | Tunnukset alla olevasta luettelosta. Tuntemattomat tunnukset pudotetaan. |
| `notes` | string | Vapaa teksti. |
| `fileId` | string | Kansikuva (target `logo`). |
| `pageLogoFileId` | string | Sivun logo (target `logo`). |
| `organizerName`, `organizerEmail`, `mobile`, `work` | string | `mobile` ja `work` enintään 40. |
| `socialLinks` | `{ platform, url }[]` | [vCardin some-alustat](#vcard) sekä `website`. |
| `ticketsUrl` | http(s)-URL | Linkki lippujen ostoon. |
| `ticketsLabel` | string | Enintään 20 merkkiä. Pidemmät tekstit katkaistaan. Tyhjä näyttää oletustekstin. |

> [accordion] Tapahtumatyypit
>
> `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] Palvelut
>
> | Ryhmä | Tunnukset |
> | - | - |
> | Sisäänpääsy | `freeEntry`, `idRequired`, `invitationOnly`, `plusOneAllowed`, `reEntryAllowed` |
> | Ikä (valitse yksi) | `adultsOnly`, `age18Plus`, `age21Plus`, `kidsWelcome` |
> | Paikan päällä | `parking`, `publicTransport`, `shuttle`, `wheelchairAccess`, `evCharging`, `wifi`, `foodDrinks`, `alcoholServed`, `atm`, `coatCheck`, `pool`, `phoneCharging`, `firstAid`, `wc` |
> | Säännöt | `petsAllowed`, `noPets`, `smokingArea`, `noSmoking`, `noPhotos` |
> | Pukukoodi (valitse yksi) | `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\"}"
}
```

Virheet:

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

## Tiedostot QR-koodeissa

Rekisteröi tiedosto [Tiedostot](https://docs.getqr.com/fi/api/endpoints/files.md)-päätepisteellä, lataa se ja välitä sen `fileId`. Käytä käyttötarkoitusta vastaavaa targetia:

* **`pdf`, `image`, `video`.** PDF-, Image- tai Video-QR-koodin sisältö.
* **`logo`.** Profiilikuvat, sivujen logot, omien linkkien kuvakkeet ja keskilogot.

Tiedostot, joita ei koskaan liitetä QR-koodiin, poistetaan varoajan jälkeen.

`fileId`-virheet, jotka palautetaan luonnissa sekä `PATCH`-pyynnössä, kun `fileId` lähetetään:

| Tila | Syy |
| - | - |
| `422 unprocessable_entity` | Tyyppi ei ota tiedostoa. Vain `pdf`, `image`, `video`, `vcard`, `social`, `multilink` ja `event` hyväksyvät sellaisen. |
| `404 not_found` | Tällä tunnuksella ei ole tiedostoa. Rekisteröi se ensin pyynnöllä `POST /api/v1/files`. |
| `422 unprocessable_entity` | Tiedosto on ladattu eri targetille. Esimerkiksi `image`-lataus PDF-QR-koodissa tai `pdf`-, `image`- tai `video`-lataus vCardin kuvana. |
| `422 unprocessable_entity` | Tiedosto on rekisteröity, mutta lataus osoitteeseen `uploadUrl` ei koskaan valmistunut. |

Kuorman sisällä olevia tiedostotunnuksia (`fileId`, `pageLogoFileId`, `customItems[].logoFileId`, `X-GETQR-*-FILEID`-rivit) ei validoida. Ne näkyvät vain, jos ne on ladattu targetilla `logo`. QR-koodi ottaa ne omikseen, joten siivous ei koske niihin.

## Tyypin vaihtaminen

Voit vaihtaa `qrType`-arvon [QR-koodin päivityksellä](https://docs.getqr.com/fi/api/endpoints/qr-codes.md#päivitä-qr-koodi). Lähetä uuteen tyyppiin sopiva `data`: tallennettu kuorma kuuluu vanhalle tyypille, joten vaihto ilman sitä hylätään.

Päivityksen jälkeen kohde määräytyy tässä järjestyksessä:

1. `vcard`, `social`, `multilink`, `event`: aina isännöity sivu.
2. Hallintapaneelissa tehty PDF-nippu tai kuvagalleria: sen laskeutumissivu.
3. `pdf`, `image`, `video`: tiedoston URL (uusi `fileId`, muuten tallennettu).
4. `link.url`, jos se lähetetään.
5. Muuttunut `data`.
6. Tallennettu URL.

Mitä kukin vaihto tekee:

* **Pois tyypeistä `pdf`, `image` tai `video`.** `fileId` sekä mahdollinen nippu tai galleria tyhjennetään.
* **Tyyppeihin `pdf`, `image` tai `video`.** Lähetä myös `fileId`, muuten käytetään tallennettua, joka voi olla vCardin kuva.
* **Pois tyypistä `app`.** Sovelluksen nimi, `link.ios` ja `link.android` tyhjennetään, joten puhelimet seuraavat uutta kohdetta.
* **Tyyppiin `wifi`.** Kuva vaihtuu raakakuormaan. Jo painetuissa koodeissa on edelleen lyhytlinkki, joka ohjaa nyt `wifi:`-URL-osoitteeseen.
* **Pois tyypistä `wifi`.** Painetuissa koodeissa säilyy vanha verkko.
* **Tyyppeihin `vcard`, `social`, `multilink` tai `event`.** Lyhytlinkki ohjataan uuteen isännöityyn sivuun.
* **Pois tyypeistä `vcard`, `social`, `multilink` tai `event`.** Lähetä uusi `data`. Kohde seuraa sitä.

Hallintapaneelissa tehdyillä staattisilla QR-koodeilla ei ole lyhytlinkkiä, joten niiden `link.url`-arvon muuttaminen palauttaa `422`.

## Ominaisuudet, joita API ei tue

Nämä hallintapaneelin ominaisuudet eivät kuulu v1-rajapintaan. Tuntemattomat kentät pudotetaan ilman virhettä, joten niiden lähettämisellä ei ole vaikutusta.

| Kenttä | Kuvaus |
| - | - |
| `appName` | App Link -QR-koodin näyttönimi. API:n kautta luodut App Link -QR-koodit näyttävät hallintapaneelin listassa sovelluskaupan URL-osoitteensa. |
| `isStatic` | Staattinen QR-koodi ilman lyhytlinkkiä. Jokaisella API:n luomalla QR-koodilla on lyhytlinkki, joten sitä voi muokata ja seurata painamisen jälkeen (paitsi `wifi`). |
| `pdfBundle` | PDF-QR-koodi, jossa on kaksi tai useampia tiedostoja. API luo vain yhden tiedoston PDF-QR-koodeja. |
| `imageGallery` | Image-QR-koodi, jossa on kaksi tai useampia kuvia. API luo vain yhden kuvan QR-koodeja. |

Hallintapaneelissa tehtyjä nippuja ja gallerioita voi edelleen lukea, keskeyttää ja poistaa API:n kautta, mutta niiden tiedostoja ei voi muuttaa sen kautta.

## Yleisiä ongelmia

> [accordion] 422 Invalid destination URL
>
> `link.url` käyttää skeemaa, johon lyhytlinkki ei voi ohjata, kuten `geo:`, `smsto:`, `matmsg:` tai `tel:`. Käytä tällä sivulla kuvattuja muotoja.

> [accordion] 400 Missing destination URL
>
> `data` on tyhjä, eikä `link.url`-arvoa ole. Aseta tyypille `app` vähintään yksi kentistä `link.ios`, `link.android`, `link.url` tai `data`.

> [accordion] Vastauksen data on lyhytlinkki eikä oma URL-osoitteeni
>
> Linkkityypeillä tallennettu `data` on lyhytlinkki. Lue kohde kentästä `url`.

> [accordion] Laskeutumissivulta puuttuu kuormani tietoja
>
> Sivu lukee vain tyypille luetellut kentät ja rivimuodot. Muut kentät tallennetaan, mutta niitä ei näytetä.

## Mitä seuraavaksi

> [card] [QR-koodit](https://docs.getqr.com/fi/api/endpoints/qr-codes.md)

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

> [card] [Mukauttaminen](https://docs.getqr.com/fi/api/guides/customization.md)

> [card] [Käyttösäännöt](https://docs.getqr.com/fi/api/guides/access-rules.md)


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