---
title: "Builds a person-to-person TR Karekod (FAST) payment payload from IBAN, name and optional TRY amount. Text only — no PNG."
method: POST
path: "/v1/tr/pay/qr"
tags: ["Finance"]
---

# Builds a person-to-person TR Karekod (FAST) payment payload from IBAN, name and optional TRY amount. Text only — no PNG.

`POST /v1/tr/pay/qr`

## Request

- Base URL: `https://api.temsor.com`
- URL: `https://api.temsor.com/v1/tr/pay/qr`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Turkish instant payments (FAST) can start from a TR Karekod that encodes the payee IBAN and name in EMV-style TLV. This builds the person-to-person organisation (payload format indicator 750210): application template with IBAN, payee name, optional 12-digit kuruş amount, optional free-text explanation, and a CRC-16/CCITT-FALSE trailer. The Turkish IBAN is normalised and checked with ISO 7064 mod-97; non-TR IBANs and non-TRY currencies are rejected. This does not send money and does not render a QR image.

**Credits per call:** 1 · **Operation id:** `tr_qr_odeme`

## Request body

- object
  - `iban` string, required: Beneficiary Turkish IBAN (with or without spaces).
  - `name` string, required: Payee name shown to the payer (2–26 chars after trim).
  - `amount` number: TRY amount; omitted → static QR (payer enters amount).
  - `explanation` string: Optional remittance note (application free field 10).
  - `currency` string: Must be TRY if provided.
  - `generatorCode` string: QR generator / EFT code (4 digits). Defaults to last 4 of the IBAN bank code.

## Response `200`

Success

- object
  - `ok` unknown, required
  - `data` object, required
    - `payload` string, required: TR Karekod P2P TLV payload text, CRC included; no PNG.
    - `mode` 'static' | 'dynamic', required
    - `iban` string, required
    - `bankCode` string, nullable, required
    - `bankName` string, nullable, required
    - `amountTry` number, nullable, required
    - `crc` string, required
  - `meta` object
    - `credits` integer
    - `cached` boolean
    - `requestId` string
    - `durationMs` integer

## Other responses

- `400`: Error
- `401`: Error
- `402`: Error
- `429`: Rate limit exceeded — wait `Retry-After` seconds. The RateLimit headers are sent here too.

---

[API](https://skmtc.dev/temsor/apis/temsor-api.md) · [All operations](https://skmtc.dev/temsor/apis/temsor-api/llms.txt) · [OpenAPI document](https://skmtc.dev/temsor/apis/temsor-api/revisions/19702107e15a?raw)
