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

> Luo, listaa, päivitä, keskeytä, monista, poista ja lataa QR-koodeja.

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

GetQR:ssä QR-koodi on kuva sekä lyhytlinkki, jonka kautta se ohjautuu. QR-koodin luominen luo myös sen lyhytlinkin, joten voit vaihtaa kohdetta myöhemmin painamatta koodia uudelleen.

| Metodi | Polku | Kuvaus |
| - | - | - |
| `GET` | `/api/v1/qrs` | [Listaa QR-koodit](#listaa-qr-koodit) |
| `POST` | `/api/v1/qrs` | [Luo QR-koodi](#luo-qr-koodi) |
| `GET` | `/api/v1/qrs/{qrId}` | [Hae QR-koodi](#hae-qr-koodi) |
| `PATCH` | `/api/v1/qrs/{qrId}` | [Päivitä QR-koodi](#päivitä-qr-koodi) |
| `PUT` | `/api/v1/qrs/{qrId}` | [Aseta keskeytystila](#aseta-keskeytystila) |
| `POST` | `/api/v1/qrs/{qrId}/pause` | [Keskeytä QR-koodi](#keskeytä-qr-koodi) |
| `POST` | `/api/v1/qrs/{qrId}/activate` | [Aktivoi QR-koodi uudelleen](#aktivoi-qr-koodi-uudelleen) |
| `POST` | `/api/v1/qrs/{qrId}/duplicate` | [Monista QR-koodi](#monista-qr-koodi) |
| `DELETE` | `/api/v1/qrs/{qrId}` | [Poista QR-koodi](#poista-qr-koodi) |
| `GET` | `/api/v1/qrs/{qrId}/download` | [Lataa QR-koodin kuva](#lataa-qr-koodin-kuva) |

> [card] [QR-koodien data tyypeittäin](https://docs.getqr.com/fi/api/guides/qr-types.md)
>
> Kunkin 16 tyypin `data`-muoto.

> [card] [Mukauttaminen](https://docs.getqr.com/fi/api/guides/customization.md)
>
> Pisteiden tyylit, värit, kehykset ja logot.

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

QR-koodin skannaustilastot ovat kohdassa [Analytiikka](https://docs.getqr.com/fi/api/endpoints/analytics.md).

## QR-koodiobjekti

Jokainen QR-koodien päätepiste vastaa tällä objektilla, paitsi [Poista](#poista-qr-koodi) ja [Lataa](#lataa-qr-koodin-kuva). Listaus palauttaa taulukon näitä objekteja.

**id** `string`

QR-koodin yksilöllinen tunnus, esimerkiksi `qr_1EPcVfeHZAY2iNoVLsgW2Aqf`.

**qrType** `string`

QR-koodin tyyppi, esimerkiksi `website`. Kaikki 16 arvoa ovat kohdassa [QR-koodien data tyypeittäin](https://docs.getqr.com/fi/api/guides/qr-types.md).

**title** `string | null`

QR-koodin nimi, joka näkyy hallintapaneelissa.

**description** `string | null`

Vapaamuotoinen muistiinpano QR-koodista.

**data** `string`

Tallennettu kuorma. Tyypeillä `wifi`, `vcard`, `social`, `multilink`, `event` ja `sms` se on lähettämäsi kuorma. Kaikilla muilla tyypeillä se on lyhytlinkki, joten lue kohde kentästä `url`.

**archived** `boolean`

`true`, kun QR-koodi on keskeytetty.

**isStatic** `boolean`

`true` hallintapaneelissa tehdylle staattiselle QR-koodille, jolla ei ole lyhytlinkkiä. API luo aina dynaamisia QR-koodeja.

**shortLink** `string | null`

Koko lyhytlinkki, esimerkiksi `https://getqr.sh/x7Kd2p1`.

**domain** `string | null`

Lyhytlinkin verkkotunnus.

**key** `string | null`

Lyhytlinkin slug.

**keyIsCustom** `boolean`

`true`, kun slug on valittu itse eikä luotu automaattisesti.

**url** `string | null`

Kohde, johon lyhytlinkki ohjaa.

**ios** `string | null`

Kohde iOS-kävijöille `app`-QR-koodeissa.

**android** `string | null`

Kohde Android-kävijöille `app`-QR-koodeissa.

**scans** `integer`

Skannausten kokonaismäärä.

**access** `object`

Käyttösäännöt. Itse salasanaa ei koskaan palauteta. Katso [Käyttösäännöt](https://docs.getqr.com/fi/api/guides/access-rules.md).

**properties**

**passwordProtected** `boolean`

Täytyykö kävijöiden antaa salasana.

**activeAt** `string | null`

Ajoitettu alkamisaika, ISO 8601.

**pauseAt** `string | null`

Ajoitettu päättymisaika, ISO 8601.

**scanLimit** `integer | null`

Skannausten enimmäismäärä.

**designKind** `string`

Vain luku. `custom` on ulkoasu, jota API voi muokata kokonaan. `branded` ja `ai` ovat hallintapaneelissa tehty brändätty tai tekoälyllä luotu ulkoasu. API ei voi muokata sen kuvaa, mutta säilyttää sen, kun muutat muita kenttiä.

**design** `object`

Tallennettu ulkoasu: `styles`, `frameOptions` ja `logoOptions`, kukin objekti tai `null`. Niillä on sama rakenne kuin pyynnön kentillä, joten voit lähettää ne takaisin. Katso [Mukauttaminen](https://docs.getqr.com/fi/api/guides/customization.md).

**file** `object | null`

`pdf`-, `image`- tai `video`-QR-koodin tiedosto: `id`, `name` ja `size` tavuina.

**appName** `string | null`

Vain luku. Hallintapaneelissa tehdyn `app`-QR-koodin näyttönimi.

**pdfBundle** `object | null`

Vain luku. Hallintapaneelissa tehty `pdf`-QR-koodi, jossa on useita tiedostoja: `title`, `layout` ja `files`.

**imageGallery** `object | null`

Vain luku. Hallintapaneelissa tehty `image`-QR-koodi, jossa on useita kuvia: `title`, `layout` ja `files`.

**createdAt** `string`

Luontipäivä, ISO 8601.

**updatedAt** `string`

Viimeisimmän päivityksen päivä, ISO 8601.

Salaisuuksia ja sisäisiä tunnuksia (`password`, `userId`, `workspaceId`, `projectId`) ei koskaan palauteta.

```json theme={null}
{
  "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
  "qrType": "website",
  "title": "Landing page",
  "description": null,
  "data": "https://getqr.sh/x7Kd2p1",
  "archived": false,
  "isStatic": false,
  "shortLink": "https://getqr.sh/x7Kd2p1",
  "domain": "getqr.sh",
  "key": "x7Kd2p1",
  "keyIsCustom": false,
  "url": "https://example.com",
  "ios": null,
  "android": null,
  "scans": 128,
  "access": {
    "passwordProtected": false,
    "activeAt": null,
    "pauseAt": null,
    "scanLimit": null
  },
  "designKind": "custom",
  "design": {
    "styles": { "dotsOptions": { "type": "rounded", "color": "#1E40AF" }, … },
    "frameOptions": { "id": "card", "text": "Scan me!", … },
    "logoOptions": { "type": "suggested", "id": "logo-website-3", "scalePercent": 25 }
  },
  "file": null,
  "appName": null,
  "pdfBundle": null,
  "imageGallery": null,
  "createdAt": "2026-08-01T10:00:00.000Z",
  "updatedAt": "2026-08-01T10:00:00.000Z"
}
```

## Listaa QR-koodit

`GET /api/v1/qrs`

Palauttaa työtilasi QR-koodit sivu kerrallaan.

**page** `integer` (default: 1)

Palautettava sivu, 1 tai suurempi.

**pageSize** `integer` (default: 100)

QR-koodeja sivua kohti, 1–100. Suurempi arvo hylätään.

**search** `string`

Hakee QR-koodin nimestä. Yli 2 merkin haut hakevat myös tallennetusta `data`-arvosta. Linkkityypeillä tallennettu `data` on lyhytlinkki, joten kohde-URL-osoitteita ei voi hakea.

**sortBy** `string` (default: createdAt)

Lajittelukenttä: `createdAt`, `updatedAt`, `clicks` (skannaukset yhteensä), `lastClicked` (viimeisin skannaus) tai `type`. `type` lajittelee aina laskevasti ja ohittaa parametrin `sortOrder`.

**sortOrder** `string` (default: desc)

Lajittelusuunta: `asc` tai `desc`.

**showArchived** `boolean` (default: false)

Sisällytä keskeytetyt QR-koodit.

**onlyArchived** `boolean` (default: false)

Palauta vain keskeytetyt QR-koodit. Ohittaa parametrin `showArchived`.

Totuusarvoparametrit ottavat merkkijonot `true` tai `false`. Pyydä seuraava sivu niin kauan kuin `pagination.hasMore` on `true`. Katso [Sivutus](https://docs.getqr.com/fi/api/introduction.md#sivutus).

```bash cURL theme={null}
curl "https://getqr.com/api/v1/qrs?page=1&pageSize=100" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "data": [
    {
      "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
      "qrType": "website",
      "title": "Landing page",
      "shortLink": "https://getqr.sh/x7Kd2p1",
      "url": "https://example.com",
      "scans": 128,
      "…": "…"
    }
  ],
  "pagination": { "page": 1, "pageSize": 100, "total": 1, "hasMore": false }
}
```

## Luo QR-koodi

`POST /api/v1/qrs`

Luo QR-koodin ja sen lyhytlinkin yhdessä. Vastaa `201 Created` ja palauttaa uuden [QR-koodin](#qr-koodiobjekti).

**Idempotency-Key** `string`

Oma uudelleenyritystunnisteesi. Kun toistat pyynnön samalla avaimella 24 tunnin sisällä, saat alkuperäisen vastauksen, eikä toista QR-koodia luoda. Katso [Uudelleenyritykset ja kaksoiskappaleet](#uudelleenyritykset-ja-kaksoiskappaleet).

**qrType** `string` *required*

Mitä QR-koodi koodaa. Tämä määrää myös muodon, jossa `data`-kentän on oltava. Jokin arvoista `website`, `pdf`, `image`, `video`, `whatsapp`, `social`, `wifi`, `app`, `feedback`, `vcard`, `sms`, `payment`, `location`, `multilink`, `email`, `event`.

**data** `string` *required*

Tyypin kuorma, joka tarkistetaan `qrType`-arvoa vasten. Tyhjä merkkijono ohittaa tarkistuksen. Kunkin tyypin muoto on kohdassa [QR-koodien data tyypeittäin](https://docs.getqr.com/fi/api/guides/qr-types.md).

**link** `object`

Lyhytlinkki, jonka kautta QR-koodi ohjautuu. Valinnainen: jos jätät sen pois, `link.url` seuraa `data`-kenttää.

**properties**

**url** `string`

Kohde, johon lyhytlinkki ohjaa. Jos se puuttuu tai on tyhjä, oletus on `data`. Jos molemmat lähetetään ja ne eroavat, `link.url` voittaa. `vcard`-, `social`-, `multilink`- ja `event`-QR-koodit osoittavat aina isännöityyn sivuunsa, ja `pdf`-, `image`- ja `video`-QR-koodit, joilla on `fileId`, tiedostoon. Hyväksytyt skeemat: `http:`, `https:`, `wifi:`, `mailto:`, `sms:`, `begin:`.

**domain** `string`

Lyhytlinkin verkkotunnus. Sen on oltava työtilasi aktiivinen verkkotunnus: muu verkkotunnus palauttaa `403`, ja verkkotunnus, joka ei ole vielä aktiivinen, palauttaa `422`. Oletus on työtilan oletusverkkotunnus.

**key** `string`

Lyhytlinkin slug, 3–15 merkkiä, tallennetaan pienin kirjaimin. Slug, joka ei ole sallittu, palauttaa `422`, ja varattu slug palauttaa `409`. Jos jätät sen pois, luodaan satunnainen 7 merkin slug.

**ios** `string | null`

Kohde-URL iOS-kävijöille `app`-QR-koodeissa.

**android** `string | null`

Kohde-URL Android-kävijöille `app`-QR-koodeissa.

**title** `string | null`

Linkin esikatselun otsikko (`og:title`), tallennetaan lyhytlinkkiin. Eri asia kuin QR-koodin oma `title`. Sitä ei vielä näytetä missään.

**description** `string | null`

Linkin esikatselun kuvaus (`og:description`), tallennetaan lyhytlinkkiin. Sitä ei vielä näytetä missään.

**expiresAt, expiredUrl** `—`

Ei käytettävissä tässä API:ssa: kumman tahansa lähettäminen palauttaa `422`. Käytä kenttää `access.pauseAt` QR-koodin pysäyttämiseen tiettynä aikana.

**title** `string`

QR-koodin nimi, joka näkyy hallintapaneelissa. Alun ja lopun välilyönnit poistetaan, 1–40 merkkiä. Jos jätät sen pois, QR-koodilla ei ole nimeä.

**description** `string`

Vapaamuotoinen muistiinpano QR-koodista. Enintään 280 merkkiä.

**fileId** `string`

`pdf`-, `image`- tai `video`-QR-koodin tiedosto, joka on ladattu vastaavalla targetilla. Tyypeillä `vcard`, `social` ja `multilink` valinnainen profiilikuva, joka on ladattu targetilla `logo`. Myös `event` hyväksyy sen, mutta sen sivu lukee kansikuvan kentästä `data.fileId`. Muut tyypit palauttavat `422`. Lataa tiedosto ensin [Tiedostot](https://docs.getqr.com/fi/api/endpoints/files.md)-päätepisteellä. Katso [Tiedostot QR-koodeissa](https://docs.getqr.com/fi/api/guides/qr-types.md#tiedostot-qr-koodeissa).

**templateId** `string`

[Malli](https://docs.getqr.com/fi/api/endpoints/templates.md), jonka ulkoasu otetaan uuteen QR-koodiin. Lähettämäsi ulkoasukentät yhdistetään sen päälle. Brändätyn tai tekoälyllä luodun ulkoasun malli palauttaa `422` (`art_template_unsupported`). Tuntematon malli tai toisen työtilan malli palauttaa `404`.

**styles** `object`

Pisteiden ja kulmien muodot sekä värit. Katso [Mukauttaminen](https://docs.getqr.com/fi/api/guides/customization.md).

**frameOptions** `object`

QR-koodin ympärille piirretty kehys ja sen toimintakehote. Katso [Mukauttaminen](https://docs.getqr.com/fi/api/guides/customization.md).

**logoOptions** `object`

Logo keskellä: ehdotettu logo tai oma tiedostosi, joka on ladattu targetilla `logo`. Tuntematon tiedosto, keskeneräinen lataus tai toisen targetin tiedosto hylätään. Katso [Mukauttaminen](https://docs.getqr.com/fi/api/guides/customization.md).

**access** `object`

Aikataulu, skannausraja ja salasanasuojaus. Katso [Käyttösäännöt](https://docs.getqr.com/fi/api/guides/access-rules.md).

**properties**

**activeAt** `string | null`

Ajoitettu alkamisaika, ISO 8601.

**pauseAt** `string | null`

Ajoitettu päättymisaika, ISO 8601.

**scanLimit** `integer | null`

Skannausten enimmäismäärä, positiivinen kokonaisluku.

**password** `string | null`

Salasana, joka kävijöiden on annettava. Sen lähettäminen ottaa suojauksen käyttöön.

**passwordProtected** `boolean`

Poistaa suojauksen käytöstä tai ottaa sen uudelleen käyttöön ja säilyttää tallennetun salasanan.

**archived** `boolean`

Onko QR-koodi keskeytetty. `true` luo sen valmiiksi keskeytettynä: skannaukset näyttävät kohteen sijaan taukosivun.

Tuntemattomat kentät pudotetaan ilman virhettä. Katso [Ominaisuudet, joita API ei tue](https://docs.getqr.com/fi/api/guides/qr-types.md#ominaisuudet-joita-api-ei-tue).

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/qrs" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: landing-page-2026-08" \
  -d '{
    "qrType": "website",
    "data": "https://example.com",
    "title": "Landing page",
    "access": { "scanLimit": 500 }
  }'
```

```json 201 theme={null}
{
  "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
  "qrType": "website",
  "title": "Landing page",
  "data": "https://getqr.sh/x7Kd2p1",
  "shortLink": "https://getqr.sh/x7Kd2p1",
  "url": "https://example.com",
  "scans": 0,
  "access": { "passwordProtected": false, "activeAt": null, "pauseAt": null, "scanLimit": 500 },
  "…": "…"
}
```

### Uudelleenyritykset ja kaksoiskappaleet

* **Avaimen kanssa.** `Idempotency-Key`-otsakkeen kanssa vastaus toistetaan 24 tunnin ajan.
* **Ilman avainta.** 30 sekunnin sisällä lähetetty identtinen runko käsitellään kaksoiskappaleena.
* **Toistot.** Toisto palauttaa tallennetun vastauksen otsakkeella `x-idempotent-replay: true`. Uusi QR-koodi palauttaa arvon `false`.
* **Kesken.** Toinen pyyntö ensimmäisen ollessa vielä käynnissä saa vastauksen `409 conflict`.
* **Epäonnistumiset.** Epäonnistunut luonti vapauttaa avaimen heti, joten voit yrittää uudelleen samalla avaimella.
* **Parhaan yrityksen periaate.** Jos suojaus ei ole käytettävissä, luonnit menevät läpi ilman suojausta.

Katso myös [Idempotenssi](https://docs.getqr.com/fi/api/introduction.md#idempotenssi).

## Hae QR-koodi

`GET /api/v1/qrs/{qrId}`

Palauttaa [QR-koodin](#qr-koodiobjekti) lyhytlinkkeineen, käyttösääntöineen, ulkoasuineen ja tiedostopohjaisilla tyypeillä myös tiedostoineen.

**qrId** `string` *required*

QR-koodin tunnus listauksen tai luonnin vastauksesta.

```bash cURL theme={null}
curl "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

Vastaus on koko [QR-koodiobjekti](#qr-koodiobjekti).

## Päivitä QR-koodi

`PATCH /api/v1/qrs/{qrId}`

Muuttaa QR-koodin sisältöä, kohdetta, ulkoasua tai käyttösääntöjä. Lähetä vain ne kentät, joita haluat muuttaa. Vastaa päivitetyllä [QR-koodilla](#qr-koodiobjekti).

**qrId** `string` *required*

QR-koodin tunnus.

Runko ottaa samat kentät kuin [QR-koodin luonti](#luo-qr-koodi), kaikki valinnaisina, näillä eroilla:

* **`templateId`.** Ei hyväksytä.
* **`link`.** Osittainen. Nykyinen kohde säilyy, kun jätät `link.url`-kentän pois. `link.domain` ja `link.key` palauttavat `422`: painettu koodi koodaa juuri lyhytlinkin, joten luo uusi QR-koodi, jos haluat käyttää eri linkkiä.
* **`data`.** Tarkistetaan lopputuloksen tyyppiä vasten vain, kun `data` tai `qrType` muuttuu. `qrType`-arvon vaihtaminen ilman sopivaa `data`-arvoa hylätään. Katso [Tyypin vaihtaminen](https://docs.getqr.com/fi/api/guides/qr-types.md#tyypin-vaihtaminen).
* **Ulkoasu.** `styles`, `frameOptions` ja `logoOptions` yhdistetään tallennettuun ulkoasuun, joten osittainen objekti muuttaa vain siinä mainitut asiat. Toisen logon valinta korvaa logon mutta säilyttää sen koon.
* **`access`.** Kukin avain käsitellään, jos se on mukana. `null` tyhjentää säännön. Käyttösäännöt kuuluvat `access`-objektiin: niiden lähettäminen `link`-objektissa palauttaa `422`.
* **`archived`.** Keskeyttää tai aktivoi uudelleen QR-koodin ja sen lyhytlinkin yhdessä, kuten [Keskeytä](#keskeytä-qr-koodi) ja [Aktivoi uudelleen](#aktivoi-qr-koodi-uudelleen).

```bash cURL theme={null}
curl -X PATCH "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Autumn campaign",
    "access": { "password": "s3cr3t", "passwordProtected": true }
  }'
```

```json 200 theme={null}
{
  "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
  "title": "Autumn campaign",
  "access": { "passwordProtected": true, "activeAt": null, "pauseAt": null, "scanLimit": null },
  "…": "…"
}
```

Se, mitä kunkin tyypin kohdalla voi muuttaa painamisen jälkeen, on kuvattu kohdassa [QR-koodien data tyypeittäin](https://docs.getqr.com/fi/api/guides/qr-types.md).

## Aseta keskeytystila

`PUT /api/v1/qrs/{qrId}`

Asettaa keskeytystilan suoraan. [Keskeytä](#keskeytä-qr-koodi) ja [Aktivoi uudelleen](#aktivoi-qr-koodi-uudelleen) tekevät saman ja ovat selkeämpiä lukea.

**qrId** `string` *required*

QR-koodin tunnus.

**archived** `boolean` *required*

`true` keskeyttää QR-koodin, `false` aktivoi sen uudelleen.

```bash cURL theme={null}
curl -X PUT "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "archived": true }'
```

```json 200 theme={null}
{
  "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
  "archived": true,
  "…": "…"
}
```

## Keskeytä QR-koodi

`POST /api/v1/qrs/{qrId}/pause`

Estää QR-koodia ohjaamasta kohteeseensa: skannaukset näyttävät sen sijaan taukosivun. Painettu koodi ja sen lyhytlinkki pysyvät voimassa. Ei pyynnön runkoa.

**qrId** `string` *required*

QR-koodin tunnus.

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf/pause" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
  "archived": true,
  "…": "…"
}
```

## Aktivoi QR-koodi uudelleen

`POST /api/v1/qrs/{qrId}/activate`

Saa keskeytetyn QR-koodin taas ohjaamaan kohteeseensa. Mahdollinen aikataulu ja skannausraja ovat edelleen voimassa. Ei pyynnön runkoa.

**qrId** `string` *required*

QR-koodin tunnus.

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf/activate" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf",
  "archived": false,
  "…": "…"
}
```

## Monista QR-koodi

`POST /api/v1/qrs/{qrId}/duplicate`

Luo kopion, jolla on sama sisältö ja ulkoasu. Ei pyynnön runkoa. Vastaa `201 Created` ja palauttaa uuden [QR-koodin](#qr-koodiobjekti).

**qrId** `string` *required*

Kopioitavan QR-koodin tunnus.

* **Lyhytlinkki.** Kopio saa oman lyhytlinkin, jossa on satunnainen slug työtilan oletusverkkotunnuksessa, ei alkuperäisen QR-koodin verkkotunnuksessa. Sen skannaukset lasketaan erikseen.
* **Nimi.** Nimeen lisätään pääte ` (Copy)`. Tulos pysyy enintään 40 merkissä: pitkää nimeä lyhennetään ensin. Nimetön QR-koodi pysyy nimettömänä.
* **Ei kopioida.** Käyttösääntöjä (salasana, aikataulu, skannausraja) ja keskeytystilaa. Kopio on aina aktiivinen.
* **Tiedostot.** PDF- ja kuvatiedostot, myös nippujen ja gallerioiden tiedostot, kopioidaan, joten kopio omistaa ne. Videotiedostot ja ulkoasun tiedostot, kuten logot, jaetaan lähteen kanssa.

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf/duplicate" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 201 theme={null}
{
  "id": "qr_7Hk2PqWmX9cTnV4sLbR8YdZe",
  "title": "Landing page (Copy)",
  "shortLink": "https://getqr.sh/p2Wq9dL",
  "url": "https://example.com",
  "archived": false,
  "scans": 0,
  "…": "…"
}
```

## Poista QR-koodi

`DELETE /api/v1/qrs/{qrId}`

Poistaa QR-koodin ja sen lyhytlinkin. Vastaa poistetulla tunnuksella.

> [!WARNING]
>
> Poisto on pysyvä. Painettu koodi ja sen lyhytlinkki lakkaavat toimimasta, eikä skannaushistoriaan enää pääse käsiksi. [Keskeytä](#keskeytä-qr-koodi) QR-koodi sen sijaan, jos saatat tarvita sitä uudelleen.

**qrId** `string` *required*

QR-koodin tunnus.

**id** `string`

Poistetun QR-koodin tunnus.

**deleted** `boolean`

Aina `true`.

```bash cURL theme={null}
curl -X DELETE "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{ "id": "qr_1EPcVfeHZAY2iNoVLsgW2Aqf", "deleted": true }
```

## Lataa QR-koodin kuva

`GET /api/v1/qrs/{qrId}/download`

Piirtää QR-koodin ulkoasuineen ja palauttaa tiedoston.

**qrId** `string` *required*

Piirrettävän QR-koodin tunnus listauksen tai luonnin vastauksesta.

**format** `string` (default: jpg)

Tulostusmuoto: `jpg`, `png`, `svg`, `pdf` (A4-sivu) tai `eps`. Brändätyn tai tekoälyllä luodun ulkoasun voi ladata vain muodoissa `jpg`, `png` tai `pdf`.

**resolution** `integer` (default: 1024)

Kuvan koko pikseleinä: `1024`, `2048` tai `4096`. `svg` ja `pdf` ohittavat sen. Brändätyn tai tekoälyllä luodun ulkoasun voi ladata vain koossa `1024`.

| `format` | `Content-Type` | Tiedostonimi |
| - | - | - |
| `jpg` | `image/jpeg` | `<title>-<resolution>px.jpg` |
| `png` | `image/png` | `<title>-<resolution>px.png` |
| `svg` | `image/svg+xml` | `<title>.svg` |
| `pdf` | `application/pdf` | `<title>.pdf` |
| `eps` | `application/postscript` | `<title>-<resolution>px.eps` |

* **Runko.** Vastauksen runko on tiedosto. Ehdotettu tiedostonimi on `Content-Disposition`-otsakkeessa, ja se muodostetaan nimestä tai nimettömälle QR-koodille arvosta `qr-code`.
* **Välimuisti.** Vastauksissa on `ETag` ja `Cache-Control: private, max-age=3600, must-revalidate`. Lähetä `ETag` takaisin `If-None-Match`-otsakkeessa, niin saat vastauksen `304 Not Modified`, kun QR-koodi ei ole muuttunut.
* **Virheet.** Tukematon muoto tai resoluutio palauttaa `400 bad_request`. Virheviesti kertoo syyn: `qr_download_invalid_format`, `qr_download_invalid_resolution`, `qr_download_art_format_unsupported` tai `qr_download_art_resolution_unsupported`.

```bash cURL theme={null}
curl "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf/download?format=png&resolution=1024" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  --output qr-code.png
```

```http 200 theme={null}
HTTP/1.1 200 OK
Content-Type: image/png
Content-Disposition: attachment; filename="landing-page-1024px.png"
ETag: "9f2c0e1b5a7d43c8b016e2f4a9d5c3718be40f92"
Cache-Control: private, max-age=3600, must-revalidate

<binary image data>
```

## Käyttösäännöt

Lähetä luonnissa tai päivityksessä `access`-objekti, kun haluat ajoittaa alun ja lopun, rajoittaa skannausten määrää tai vaatia salasanan. Pois jätetyt säännöt pysyvät ennallaan, ja `null` tyhjentää säännön. Koko toiminta esimerkkeineen on kuvattu kohdassa [Käyttösäännöt](https://docs.getqr.com/fi/api/guides/access-rules.md).

## Ulkoasuobjektit

`styles`, `frameOptions` ja `logoOptions` määrittävät pisteiden ja kulmien muodot, värit, kehyksen ja logon. Ne toimivat samoin QR-koodeissa, [malleissa](https://docs.getqr.com/fi/api/endpoints/templates.md) ja [joukkoluonneissa](https://docs.getqr.com/fi/api/endpoints/bulk-qr-creations.md). Tuntemattomat muodot, kehykset tai logot hylätään. Kaikki hyväksytyt arvot ja esimerkki ovat kohdassa [Mukauttaminen](https://docs.getqr.com/fi/api/guides/customization.md).

## Yleisiä ongelmia

> [accordion] 422, kun asetan salasanan, aikataulun tai skannausrajan
>
> Lähetä sääntö `access`-objektissa, ei `link`-objektissa.

> [accordion] 422, kun muutan link.domain- tai link.key-arvoa
>
> Lyhytlinkkiä ei voi muuttaa luonnin jälkeen, koska painettu koodi koodaa sen. Luo sen sijaan uusi QR-koodi.

> [accordion] 422 "Expected … for qrType"
>
> `data` ei vastaa `qrType`-arvon muotoa. Tarkista tyyppi kohdasta [QR-koodien data tyypeittäin](https://docs.getqr.com/fi/api/guides/qr-types.md).

> [accordion] 409 conflict QR-koodia luotaessa
>
> Identtinen luonti on vielä käynnissä, tai `link.key` on varattu. Yritä uudelleen, kun ensimmäinen pyyntö on valmis. `Idempotency-Key`-otsakkeen kanssa uusi yritys palauttaa alkuperäisen QR-koodin.

> [accordion] Lataus on JPEG eikä PNG
>
> Parametrit ovat `format` ja `resolution`, ja `format`-parametrin oletus on `jpg`. Lähetä `format=png`.

> [accordion] 404 QR-koodille, jonka näen hallintapaneelissa
>
> Jokainen pyyntö suoritetaan API-avaimesi työtilassa. Tarkista, että QR-koodi kuuluu siihen. Katso [Todennus](https://docs.getqr.com/fi/api/authentication.md).

## Mitä seuraavaksi

> [card] [QR-koodien data tyypeittäin](https://docs.getqr.com/fi/api/guides/qr-types.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)

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


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