# Creare cod QR (Static, Dinamic)

**POST `/v2/mia/qr`**

Acest endpoint permite generarea unui cod QR de tip Static sau Dynamic, cu diferite opțiuni de configurare privind suma, valabilitatea și integrarea în sistemele comercianților.

#### Parametri de request (body)

| Câmp          | Tip                | Obligatoriu                       | Descriere                                                                                                                                                                                                                                                                                                                                                                |
| ------------- | ------------------ | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `type`        | `string(enum)`     | da                                | <p>Tipul codului QR.<br>Valori posibile: <code>Static</code>, <code>Dynamic</code>.<br><br>• <code>Static</code>: cod QR care poate fi utilizat de mai multe ori (ex: autocolant).<br>• <code>Dynamic</code>: cod QR care poate fi utilizat o singură dată (ex: terminal POS).</p>                                                                                       |
| `expiresAt`   | `string(datetime)` | da, doar pentru `Dynamic`         | <p>Data expirării pentru codul QR de tip Dynamic.<br>• Valoare minimă: 1 minut<br>• Valoare maximă: 60 zile<br>• Format: ISO 8601-1:2019 (ex: <code>"2029-10-22T10:32:28+03:00"</code>)<br><br><strong>Nu se trimite</strong> pentru QR de tip <code>Static</code>.</p>                                                                                                  |
| `amountType`  | `string(enum)`     | da                                | <p>Tipul sumei. Valori posibile:<br>• <code>Fixed</code> – sumă fixă (folosește <code>amount</code>)<br>• <code>Controlled</code> – sumă variabilă cu limită (<code>amountMin</code> și <code>amountMax</code>)<br>• <code>Free</code> – disponibil doar pentru QR de tip <code>Static</code>, fără sumă predefinită (clientul introduce suma în aplicația bancară).</p> |
| `amount`      | `number(decimal)`  | da pentru `Fixed` și `Controlled` | <p>Suma plătită. Trebuie să respecte: <code>amountMin ≤ amount ≤ amountMax</code>.<br>• Min: > 0<br>• Max: 100000<br><br><strong>Nu se trimite</strong> pentru <code>Free</code>.</p>                                                                                                                                                                                    |
| `amountMin`   | `number(decimal)`  | da pentru `Controlled`            | <p>Suma minimă permisă.<br>• Min: > 0<br>• Max: <code>< amountMax</code><br><br><strong>Nu se trimite</strong> pentru <code>Free</code> sau <code>Fixed</code>.</p>                                                                                                                                                                                                      |
| `amountMax`   | `number(decimal)`  | da pentru `Controlled`            | <p>Suma maximă permisă.<br>• Min: <code>> amountMin</code><br>• Max: 100000<br><br><strong>Nu se trimite</strong> pentru <code>Free</code> sau <code>Fixed</code>.</p>                                                                                                                                                                                                   |
| `currency`    | `string(enum)`     | da                                | <p>Moneda în care se va face plata.<br>Valori posibile: <code>MDL</code> (conform ISO 4217).</p>                                                                                                                                                                                                                                                                         |
| `description` | `string(500)`      | da                                | Descrierea comenzii.                                                                                                                                                                                                                                                                                                                                                     |
| `orderId`     | `string(100)`      | nu                                | ID-ul comenzii din partea comerciantului.                                                                                                                                                                                                                                                                                                                                |
| `callbackUrl` | `string(1000)`     | nu                                | <p>URL-ul unde comerciantul va primi datele după plata cu succes.<br>Format: URL HTTPS.</p>                                                                                                                                                                                                                                                                              |
| `redirectUrl` | `string(1000)`     | nu                                | <p>URL-ul unde clientul va fi redirecționat după o plată cu succes.<br>Format: URL HTTPS.</p>                                                                                                                                                                                                                                                                            |
| `terminalId`  | `string(100)`      | nu                                | ID-ul terminalului, furnizat de bancă.                                                                                                                                                                                                                                                                                                                                   |

#### Request example

```json
{
    "type": "Dynamic",
    "expiresAt": "2029-10-22T10:32:28+03:00",
    "amountType": "Fixed",
    "amount": 50.00,
    "currency": "MDL",
    "description": "Order description",
    "orderId": "123",
    "callbackUrl": "https://example.com/callback",
    "redirectUrl": "https://example.com/success",
    "terminalId": "P011111"
}
```

***

#### Parametri de răspuns

| Câmp                  | Tip                | Descriere                                                                   |
| --------------------- | ------------------ | --------------------------------------------------------------------------- |
| `result.qrId`         | `string(guid)`     | Identificator unic al codului QR.                                           |
| `result.extensionId`  | `string(guid)`     | Identificatorul extensiei QR.                                               |
| `result.orderId`      | `string(100)`      | ID-ul comenzii din partea comerciantului.                                   |
| `result.type`         | `string(enum)`     | Tipul QR returnat. Valori posibile: `Static`, `Dynamic`, `Hybrid`.          |
| `result.url`          | `string(1000)`     | Linkul QR generat. Format: URL HTTPS.                                       |
| `result.expiresAt`    | `string(datetime)` | Data expirării QR-ului (pentru Dynamic sau Hybrid). Format ISO 8601-1:2019. |
| `ok`                  | `boolean`          | Statusul cererii. `true` – fără erori, `false` – cu erori.                  |
| `errors`              | `array`            | Lista erorilor (dacă `ok` este `false`).                                    |
| `errors.errorCode`    | `string`           | Codul erorii.                                                               |
| `errors.errorMessage` | `string`           | Mesajul erorii.                                                             |

#### Response example

```json
{
    "result": {
        "qrId": "123e4567-e89b-12d3-a456-426614174000",
        "extensionId": "40e6ba44-7dff-48cc-91ec-386a38318c68",
        "orderId": "123",
        "type": "Dynamic",
        "url": "https://example.com/qr/123e4567-e89b-12d3-a456-426614174000",
        "expiresAt": "2029-10-22T10:32:28+03:00"
    },
    "ok": true
}
```
