# QR Code with Logo API
> Generate branded QR codes with a centre logo overlay, custom foreground and background colors, chosen size and error-correction level, as PNG or SVG. When a logo is supplied the error-correction level is raised automatically so the code stays scannable, and the logo is placed on a rounded white plate in the centre. Includes one-call helpers that build the correct payload for you: a Wi-Fi-join QR (SSID, password, encryption, hidden), a vCard contact QR (name, phone, email, organisation, title, URL, address) and a batch endpoint that returns up to 100 QR codes in a single request. Supply a logo by public URL, base64 or a raw binary body; receive results as base64 PNG/SVG JSON or, with raw=1, the raw image bytes. Pure server-side rendering (qrcode + sharp), no third-party upstream. Ideal for marketing and packaging, business cards and events, restaurant menus, Wi-Fi sharing and app onboarding.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/qrlogo-api/..."
```

## Pricing
- **Free** (Free) — 11,000 calls/Mo, 2 req/s
- **Basic** ($7/Mo) — 130,000 calls/Mo, 6 req/s
- **Pro** ($20/Mo) — 950,000 calls/Mo, 16 req/s
- **Mega** ($53/Mo) — 4,800,000 calls/Mo, 45 req/s

## Endpoints

### QR

#### `GET /v1/batch` — Up to 100 QR codes at once

**Parameters:**
- `items` (query, required, string) — Array or comma/newline list of strings Example: `a,b,c`
- `size` (query, optional, string) — Size Example: `512`
- `ecc` (query, optional, string) — L|M|Q|H Example: `M`
- `fg` (query, optional, string) — Foreground hex Example: `#000000`
- `bg` (query, optional, string) — Background hex Example: `#ffffff`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/qrlogo-api/v1/batch?items=a%2Cb%2Cc&size=512&ecc=M&fg=%23000000&bg=%23ffffff"
```

**Response:**
```json
{
    "data": {
        "count": 3,
        "results": [
            {
                "data": "a",
                "base64": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAklEQVR4AewaftIAAAmwSURBVO3BgQ1lWZYbMB2h8k/5ugNYLMZdD/Afi+S9fwQAmNIAAHMaAGBOAwDMaQCAOQ0AMKcBAOY0AMCcBgCY0wAAcxoAYE4DAMxpAIA5DQAwpwEA5jQAwJwGAJjTAABzGgBgTgMAzGkAgDkNADCnAQDmNADAnAYAmNMAAHMaAGBOAwDMaQCAOQ0AMKcBAOY0AMCcBgCY0wAAcxoAYE4DAMxpAIA5DQAwpwEA5jQAwJwGAJjzJ/8F7i7wb7338uvuLl967+Vrd5df997Ll+4u8G+99/LLGgBgTgMAzGkAgDkNADCnAQDmNADAnAYAmNMAAHMaAGBOAwDMaQCAOQ0AMKcBAOY0AMCcBgCY0wAAcxoAYE4DAMxpAIA5DQAw509GvffC77m7/Lq7y9fee/nS3eXXvfey6L0Xfs/dZU0DAMxpAIA5DQAwpwEA5jQAwJwGAJjTAABzGgBgTgMAzGkAgDkNADCnAQDmNADAnAYAmNMAAHMaAGBOAwDMaQCAOQ0AMOdP+MTdZdF7L/y9u8uX3nv52t2F33N3WfTeC3+nAQDmNADAnAYAmNMAAHMaAGBOAwDMaQCAOQ0AMKcBAOY0AMCcBgCY0wAAcxoAYE4DAMxpAIA5DQAwpwEA5jQAwJwGAJjTAABz/gT4f+69ly/dXQD+Nw0AMKcBAOY0AMCcBgCY0wAAcxoAYE4DAMxpAIA5DQAwpwEA5jQAwJwGAJjTAABzGgBgTgMAzGkAgDkNADCnAQDmNADAnD8B/q+89/K1u8uX3nv5dXeXr733AvxnGgBgTgMAzGkAgDkNADCnAQDmNADAnAYAmNMAAHMaAGBOAwDMaQCAOQ0AMKcBAOY0AMCcBgCY0wAAcxoAYE4DAMxpAIA5DQAw50/4xHsv8G+99/Klu8uve++Fv/feC/wbDQAwpwEA5jQAwJwGAJjTAABzGgBgTgMAzGkAgDkNADCnAQDmNADAnAYAmNMAAHMaAGBOAwDMaQCAOQ0AMKcBAOY0AMCcPxl1d4F/4+7ytfdeft17L1+6u3ztvZdfd3eBX9AAAHMaAGBOAwDMaQCAOQ0AMKcBAOY0AMCcBgCY0wAAcxoAYE4DAMxpAIA5DQAwpwEA5jQAwJwGAJjTAABzGgBgTgMAzGkAgDn3/hHgP3Z3+XXvvQD8bxoAYE4DAMxpAIA5DQAwpwEA5jQAwJwGAJjTAABzGgBgTgMAzGkAgDkNADCnAQDmNADAnAYAmNMAAHMaAGBOAwDMaQCAOX/yX+Du8rX3Xvg9d5evvffy6957+dLd5de99/K1u8uve+/l191d1
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/generate` — Branded QR code (with optional logo)

**Parameters:**
- `data` (query, required, string) — Text or URL to encode Example: `https://oanor.com`
- `size` (query, optional, string) — 64..2000 Example: `512`
- `margin` (query, optional, string) — Quiet-zone modules Example: `2`
- `ecc` (query, optional, string) — L|M|Q|H Example: `H`
- `fg` (query, optional, string) — Foreground hex Example: `#1a3d7c`
- `bg` (query, optional, string) — Background hex Example: `#ffffff`
- `format` (query, optional, string) — png|svg Example: `png`
- `logo_url` (query, optional, string) — Logo image URL
- `logo_base64` (query, optional, string) — Logo base64
- `logo_size` (query, optional, string) — Logo size 5..30 % Example: `22`
- `raw` (query, optional, string) — raw=1 for image bytes

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/qrlogo-api/v1/generate?data=https%3A%2F%2Foanor.com&size=512&margin=2&ecc=H&fg=%231a3d7c&bg=%23ffffff&format=png&logo_size=22"
```

**Response:**
```json
{
    "data": {
        "base64": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAklEQVR4AewaftIAAAznSURBVO3B0Y0kOZAlwNeO0oK6UDN+UTPqQjl6R4LDVSTQsbluZn/+/icAQCsVAKCdCgDQTgUAaKcCALRTAQDaqQAA7VQAgHYqAEA7FQCgnQoA0E4FAGinAgC0UwEA2qkAAO1UAIB2KgBAOxUAoJ0KANBOBQBopwIAtFMBANqpAADtVACAdioAQDsVAKCdCgDQTgUAaKcCALRTAQDaqQAA7VQAgHZ+8rIxV/ge9+x8YsyVt9yz09GYK2+5Z+epMVc+cc/OW8ZceeqenU+MucL3uGfnLRUAoJ0KANBOBQBopwIAtFMBANqpAADtVACAdioAQDsVAKCdCgDQTgUAaKcCALRTAQDaqQAA7fzki92zw++NufKN7tn5xJgrb7ln5y337Hyje3Y+MebKU/fsdHTPDr835so3qgAA7VQAgHYqAEA7FQCgnQoA0E4FAGinAgC0UwEA2qkAAO1UAIB2KgBAOxUAoJ0KANBOBQBopwIAtPOTxsZc+Ub37Hyre3aeGnPlLffsfGLMlafu2fnEmCtP3bPziTFXOrpnp6MxV77RPTsdVQCAdioAQDsVAKCdCgDQTgUAaKcCALRTAQDaqQAA7VQAgHYqAEA7FQCgnQoA0E4FAGinAgC08xP4h8Zcecs9Ox3ds/ON7tn5xJgrT4258ol7duB/uwoA0E4FAGinAgC0UwEA2qkAAO1UAIB2KgBAOxUAoJ0KANBOBQBopwIAtFMBANqpAADtVACAdioAQDs/gS9xz84nxlx5yz07T4258q3u2XlqzJW33LMD/9dVAIB2KgBAOxUAoJ0KANBOBQBopwIAtFMBANqpAADtVACAdioAQDsVAKCdCgDQTgUAaKcCALTzk8bu2eF7jLnylnt2PjHmylP37HyrMVe+0Zgrn7hnp6N7dvgeFQCgnQoA0E4FAGinAgC0UwEA2qkAAO1UAIB2KgBAOxUAoJ0KANBOBQBopwIAtFMBANqpAADtVACAdn7yxcZcoY97dj4x5kpHY648dc/OW+7Z+cSYK0/ds/OJMVeeumfnLWOu0EcFAGinAgC0UwEA2qkAAO1UAIB2KgBAOxUAoJ0KANBOBQBopwIAtFMBANqpAADtVACAdioAQDt//v4nwP/TmCv83j07wP9OFQCgnQoA0E4FAGinAgC0UwEA2qkAAO1UAIB2KgBAOxUAoJ0KANBOBQBopwIAtFMBANqpAADtVACAdn7CI2OufOKenbeMufLUPTtvGXPlW92z89SYK99qzJW33LPD74y58q3u2XlqzJW33LPzlgoA0E4FAGinAgC0UwEA2qkAAO1UAIB2KgBAOxUAoJ0KANBOBQBopwIAtFMBANqpAADtVACAdv78/U/gHxlz5S337Dw15spb7tn5xJgrb7ln5xuNufKt7
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/vcard` — vCard contact QR code

**Parameters:**
- `name` (query, required, string) — Full name Example: `Jane Doe`
- `phone` (query, optional, string) — Phone Example: `+15550001234`
- `email` (query, optional, string) — Email Example: `jane@example.com`
- `org` (query, optional, string) — Organisation Example: `Acme`
- `title` (query, optional, string) — Job title Example: `CEO`
- `url` (query, optional, string) — Website
- `address` (query, optional, string) — Address
- `raw` (query, optional, string) — raw=1

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/qrlogo-api/v1/vcard?name=Jane+Doe&phone=%2B15550001234&email=jane%40example.com&org=Acme&title=CEO"
```

**Response:**
```json
{
    "data": {
        "base64": "iVBORw0KGgoAAAANSUhEUgAAAf8AAAH/CAYAAABZ8dS+AAAAAklEQVR4AewaftIAABLLSURBVO3BQY5g2REcQY9E3//KoVkLEJmA3vB3VbpZ+g8kSdIZgyRJOmWQJEmnDJIk6ZRBkiSdMkiSpFMGSZJ0yiBJkk4ZJEnSKYMkSTplkCRJpwySJOmUQZIknTJIkqRTBkmSdMogSZJOGSRJ0imDJEk6ZZAkSacMkiTplEGSJJ3yh39BEvTftWUjCa+1ZSMJW215LQkbbdlKwt+uLV9KwkZbtpKw0ZatJHylLa8lYaMtX0rCRls2kqD/rC0vDZIk6ZRBkiSdMkiSpFMGSZJ0yiBJkk4ZJEnSKYMkSTplkCRJpwySJOmUQZIknfKHj7XlN0nCV9ryWlu2knBRW7aSsJGE19rypba81paNJGy05bUk/ARJ2GrLV9rymyThC4MkSTplkCRJpwySJOmUQZIknTJIkqRTBkmSdMogSZJOGSRJ0imDJEk65Q8/RBK+1JavtOW1JHylLVtJ2EjCVls2krCRhJ8gCVtt2UjCa235CZKw0ZatJOiNJHypLX+zQZIknTJIkqRTBkmSdMogSZJOGSRJ0imDJEk6ZZAkSacMkiTplEGSJJ0ySJKkU/6gv14SXmvLa0n4Slu2krDRlo0kbLVlIwmvtWUrCRtt2UrCV9qykYTXkrDVlp8gCRtt0d9pkCRJpwySJOmUQZIknTJIkqRTBkmSdMogSZJOGSRJ0imDJEk6ZZAkSaf8QX+9tryWhI22bLXltbZ8JQkbbdlKwleS8FoSttqykYSvtOW1JHwpCdL/bZAkSacMkiTplEGSJJ0ySJKkUwZJknTKIEmSThkkSdIpgyRJOmWQJEmnDJIk6ZQ//BBt0X+WhK22bCRhqy0bSdhqy0YSttqykYSNJHypLV9JwmtteS0JG0nYastGW15LwlZbLmqL/t8GSZJ0yiBJkk4ZJEnSKYMkSTplkCRJpwySJOmUQZIknTJIkqRTBkmSdMofPpYE/WdJ2GjLVhI22rKVhI22bCVhoy1bSdhoy0YSttqykYTXkrDVlq8kYastL7VlKwkbbdlKwkZbtpKw0ZatJGy05bUk6P/fIEmSThkkSdIpgyRJOmWQJEmnDJIk6ZRBkiSdMkiSpFMGSZJ0yiBJkk4ZJEnSKX/4F7RF/3tJ+AmSsNWWjSRstWUjCb9JW76UhK+0ZSMJW235CdqykYSttrzUFv1vDZIk6ZRBkiSdMkiSpFMGSZJ0yiBJkk4ZJEnSKYMkSTplkCRJpwySJOmUP/wLkrDVlo0kvNaWrSR8pS2vJeEnSMJGW7aS8Jsk4Tdpy2tJ2GjLb5OEjbZsJWGjLRtJ2GrLa0nYaMtWEl5qy0uDJEk6ZZAkSacMkiTplEGSJJ0ySJKkUwZJknTKIEmSThkkSdIpgyRJOiX9Bz9AEn6Ctmwl4Stt2UjCVlteS8JGW
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/wifi` — Wi-Fi join QR code

**Parameters:**
- `ssid` (query, required, string) — Network name Example: `MyCafe`
- `password` (query, optional, string) — Password Example: `secret123`
- `encryption` (query, optional, string) — WPA|WEP|nopass Example: `WPA`
- `hidden` (query, optional, string) — Hidden network Example: `false`
- `size` (query, optional, string) — Size Example: `512`
- `raw` (query, optional, string) — raw=1

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/qrlogo-api/v1/wifi?ssid=MyCafe&password=secret123&encryption=WPA&hidden=false&size=512"
```

**Response:**
```json
{
    "data": {
        "base64": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAklEQVR4AewaftIAAAwESURBVO3Bga0lAW4ksJLw80+5bjM4Tzew7WeRnP5HAIBTNgDAORsA4JwNAHDOBgA4ZwMAnLMBAM7ZAADnbACAczYAwDkbAOCcDQBwzgYAOGcDAJyzAQDO2QAA52wAgHM2AMA5GwDgnA0AcM4GADhnAwCcswEAztkAAOdsAIBzNgDAORsA4JwNAHDOBgA4ZwMAnLMBAM7ZAADn/OVjMxN+R9t8ZWbyRts8NTN5o22empn8qra5aGbyVNu8MTPhd7TNVzYAwDkbAOCcDQBwzgYAOGcDAJyzAQDO2QAA52wAgHM2AMA5GwDgnA0AcM4GADhnAwCcswEAzvnLD2sb/t3M5KKZyVNt88bM5KKZyVfa5itt84vahn83M/lFGwDgnA0AcM4GADhnAwCcswEAztkAAOdsAIBzNgDAORsA4JwNAHDOBgA4ZwMAnLMBAM7ZAADnbACAc/5y2MzkF7XNr5qZ/KKZya9qm6dmJm+0zVdmJr+obX7VzOQXtc1FGwDgnA0AcM4GADhnAwCcswEAztkAAOdsAIBzNgDAORsA4JwNAHDOBgA4ZwMAnLMBAM7ZAADn/AV+RNu8MTN5qm3emJk81TZvzEx+0czkK23zxswE/rfbAADnbACAczYAwDkbAOCcDQBwzgYAOGcDAJyzAQDO2QAA52wAgHM2AMA5GwDgnA0AcM4GADhnAwCc8xfg/7S2eWpm8sbM5Km2+crM5I22gf/tNgDAORsA4JwNAHDOBgA4ZwMAnLMBAM7ZAADnbACAczYAwDkbAOCcDQBwzgYAOGcDAJyzAQDO+cthbcMdbfOVtvlFbfOVmckbbfNU27wxM3mqbX5V2/A7NgDAORsA4JwNAHDOBgA4ZwMAnLMBAM7ZAADnbACAczYAwDkbAOCcDQBwzgYAOGcDAJyzAQDO2QAA5/zlh81M4H9qZvJU27wxM3mqbd6YmTzVNm/MTJ5qmzdmJk+1zUUzE+7YAADnbACAczYAwDkbAOCcDQBwzgYAOGcDAJyzAQDO2QAA52wAgHM2AMA5GwDgnA0AcM4GADjnLx9rG/ifmJn8qrbhv6ttnpqZ/Kq2gf+JDQBwzgYAOGcDAJyzAQDO2QAA52wAgHM2AMA5GwDgnA0AcM4GADhnAwCcswEAztkAAOdsAIBzNgDAOdP/yIdmJk+1zRszE/5N23xlZvJG2zw1M/lK2/yqmckvaptfNTPh37TNRRsA4JwNAHDOBgA4ZwMAnLMBAM7ZAADnbACAczYAwDkbAOCcDQBwzgYAOGcDAJyzAQDO2QAA5/zlsLb5yszkqbb5VTOTp9rmjZnJU23zlZnJr2qbr8xMnpqZvNE2X2mbp2Ymb7TNUzOTN9rmKzOTp9rmKxsA4JwNAHDOBgA4ZwMAnLMBAM7ZAADnb
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/qrlogo-api
OpenAPI spec: https://www.oanor.com/api/qrlogo-api/openapi.json
