{"openapi":"3.1.0","jsonSchemaDialect":"https://spec.openapis.org/oas/3.1/dialect/base","info":{"title":"Poštárna API","version":"1.0.0","description":"Poštárna is a multi-tenant e-mail marketing platform with statistics for companies and e-shops (Czech and Slovak). This document describes every\nroute an integration can call. Guides in Czech and Slovak: https://www.postarna.cz/docs/api (index for AI agents:\nhttps://www.postarna.cz/llms.txt, everything in one Markdown file: https://www.postarna.cz/llms-full.txt).\n\n## Three APIs\n* **API v1** (`/api/v1/tenants/{tenant}/...`): the full API, the same one the Poštárna web app uses. JSON in UTF-8.\n* **SmartEmailing compatible API v3** (`/api/v3/...`) and its CSV statistics (`/api/csv/...`): the same paths,\n  envelopes and errors as SmartEmailing's REST API v3, so an existing SE integration only changes the address, the\n  user name and the key. Read operations plus account webhooks.\n* **MCP server** (`POST /mcp`): Model Context Protocol for AI assistants (ChatGPT, Claude, Cursor ...), OAuth 2.1 or an\n  API key.\n\n## Authentication\nCreate an API key in the app: Nastavení › Datové zdroje › API klíče (Settings › Data sources › API keys). The key\n(`pst_` + 43 characters) is shown once. Send it as `Authorization: Bearer pst_...`, or as HTTP Basic with the e-mail\nof an active member of the company as the user name and the key as the password (both work on v1 and v3). A key\nworks only in its own company (tenant), with the roles it was given (never more than its creator has), and with\nscope `full` (read and write) or `read` (only routes whose permission level is read). Keys never reach the members,\ninvitations, API keys and connected apps (those need a signed-in person: 403 `forbidden` / `api_key`).\n\n`{tenant}` in v1 paths is the company's public id (a UUID). Find it with `GET /api/v3/account-info` (`data.guid`) or\nin the app on the API keys page.\n\n## Conventions (API v1)\n* IDs are strings. Times are ISO 8601 in UTC with milliseconds (`2026-09-30T08:00:00.000Z`); local calendar days of\n  the company are `YYYY-MM-DD`; automation settings use local `YYYY-MM-DDTHH:MM` and `HH:MM`.\n* Money is a decimal string next to its `currency` (`\"1290.00\"`, `\"CZK\"`). CZK and EUR are never added up or\n  converted: every sum is per currency.\n* Lists are paged: `page` from 1, `pageSize` 1 to 100 (default 25); the answer is `{items, total, page, pageSize}`.\n  Some grids take `sort` (`name,-createdAt`, at most 3 fields, `-` = descending).\n* Request bodies of POST, PUT and PATCH are `application/json` (415 `validation` / `contentType` otherwise); CSV\n  import and file upload also take `multipart/form-data`. Unknown body fields are ignored.\n* Errors: `{\"error\": {\"code\": \"...\", \"message\": \"<field or detail>\", \"params\": {...}}}`. `code` is stable and\n  machine readable, `message` names the field or the reason, `params` carries details (for example the issues of an\n  automation graph). The API never sends texts for people.\n* No idempotency keys: retry only requests that are safe to repeat (GET, PUT of a whole object, DELETE). For POST,\n  read the state first (for example list the contacts by e-mail) before you retry after a timeout. Concurrent\n  edits of content and automation graphs are guarded by versions (`baseVersion`, 409 `conflict` / `version`).\n\n## Limits\nPer company (all keys together): a bucket of 2 500 requests refilled with 4 requests a second, and 100 000 requests a\nday (refilled continuously). Every answer to a key carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and\n`X-RateLimit-Reset` (unix time when the bucket is full again) of the bucket nearest to running out. Over the limit:\n429 `rate_limited` with `Retry-After` (seconds). Some actions have their own limits (test e-mails 10 per day per\ncampaign or template, contact events 60 per contact in 10 minutes, MCP 300 messages a minute).\n\n## Consent and sending\nPoštárna never e-mails a contact who unsubscribed, bounced, complained or is suppressed, and campaigns only reach\ncontacts with a valid marketing consent. Sending to real recipients (approving a campaign, activating an automation)\nis irreversible: check the audience first (`POST .../campaigns/audience`, `POST .../automations/{id}/test`). Test\ne-mails go only to the company's test addresses (`GET .../test-recipients`).\n","contact":{"name":"deriverge s.r.o.","url":"https://www.postarna.cz/docs/api"},"x-guides":{"cs":"https://www.postarna.cz/docs/api","sk":"https://www.postarna.sk/docs/api","llms":"https://www.postarna.cz/llms.txt","llmsFull":"https://www.postarna.cz/llms-full.txt"}},"servers":[{"url":"https://www.postarna.cz","description":"Production (the same API answers on www.postarna.sk)"}],"security":[{"bearerAuth":[]},{"basicAuth":[]}],"tags":[{"name":"Account","x-displayName":"Account and settings","description":"Shops (e-shops) of the company, company data, consent settings, notifications, labels, web tracking, billing (read), SmartEmailing migration state."}],"x-error-codes":{"conflict":{"meaning":"The change would break the state of the object. `message`: `name` (name taken), `locked` (a list bound to an e-shop), `status` (wrong state, e.g. editing a sent campaign), `recipients` (the audience changed more than 5 % since you counted it, `params.expected` and `params.actual`), `version` (stale `baseVersion`, `params.current`), `confirm` (saving a running automation needs `confirmRunning: true`), `waiting` (contacts wait in a node you remove, `params.nodes`), `runs` (deleting an automation that ran), `trigger` (no manual trigger), `limit` (too many objects).","fix":"Read the object again, then repeat with current data; for `recipients` count the audience again and send the new `expectedRecipients`."},"count_mismatch":{"meaning":"`expectedRecipients` does not match the audience.","fix":"Count again with `POST /campaigns/audience` and send the new number."},"csrf":{"meaning":"Browser session request without the CSRF header (never with an API key).","fix":"Send the API key in `Authorization` instead of cookies."},"empty_segment":{"meaning":"The campaign audience has no recipient.","fix":"Change the audience."},"expired":{"meaning":"The object is no longer available (an export file older than its retention).","fix":"Create it again (POST /exports)."},"forbidden":{"meaning":"The credentials are valid but not allowed here. `message`: `tenant` (another company in the path), `scope` (a read-only key on a write route), `api_key` (members, invitations and keys need a signed-in person), a module name (`contacts`, `campaigns`, `content`, `settings`, `billing`: the key's roles lack the level), `read_only` (support view).","fix":"Use the tenant id of the key (`GET /api/v3/account-info`), a key with scope `full`, or a key whose roles include the module (for example marketing_manager)."},"method_not_allowed":{"meaning":"The path exists but not with this HTTP method.","fix":"Check the method in this document."},"not_found":{"meaning":"The object does not exist in this company (objects of other companies answer the same).","fix":"Check the id; list the objects first."},"not_implemented":{"meaning":"The feature is not available yet.","fix":"Do not rely on it."},"rate_limited":{"meaning":"Too many requests: the company's API limit, or the limit of one action (test e-mails, contact events, sign-in attempts). `Retry-After` says after how many seconds to retry.","fix":"Wait `Retry-After` seconds; spread requests (4 a second sustained)."},"recently_sent":{"meaning":"HTTP 423: the contact cannot be deleted yet, a campaign e-mail to it is queued or went out in the last 24 hours (SmartEmailing answers the same).","fix":"Delete it after 24 hours. A request to be forgotten (GDPR) uses POST /contacts/{id}/erase, which is never refused."},"server":{"meaning":"Unexpected server error.","fix":"Retry later; the request may be repeated if it is safe to repeat."},"suppression_locked":{"meaning":"The address is suppressed for another reason (bounce, complaint, unsubscribe), so the blacklist cannot be added or removed; `params.reason` names it.","fix":"Leave it: such suppressions protect the sender and are removed only one by one (DELETE /suppressions/{email}) when the reason is gone."},"unauthorized":{"meaning":"No valid credentials: the API key is unknown, revoked, expired, idle for 180 days, its creator left the company, or the HTTP Basic user name is not an active member.","fix":"Check the key and the header (`Authorization: Bearer pst_...`). Create a new key in Nastavení › Datové zdroje › API klíče."},"unavailable":{"meaning":"A service the action needs is not available (`mail`: the mail backend refused a test e-mail, `data_key`: encryption key for webhook passwords missing).","fix":"Retry later; tell support when it persists."},"upstream":{"meaning":"An outside service failed (downloading a file by URL, the stock photo service); `params.reason` says why.","fix":"Check the URL or retry later."},"validation":{"meaning":"A parameter or body field is missing, has the wrong type or an invalid value. `message` names it (`email`, `definition.1.0.listId`, `graph` ...), `params` may carry details such as `params.issues` of an automation graph or `params.reason`.","fix":"Fix the named field. For 415 `contentType` send `Content-Type: application/json`; for `body` send a JSON object."}},"paths":{"/api/v1/public/price-list":{"get":{"operationId":"price_list","summary":"Public price list (no authentication)","tags":["Account"],"description":"The active tiers and the settings of the calculator (public, as SmartEmailing's price list on its web).","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceList"}}}}}}},"/api/v1/tenants/{tenant}/account-webhooks":{"get":{"operationId":"account_webhooks_index","summary":"List account webhooks and their events","tags":["Account"],"description":"{items, events, silentEvents, limit}: the company's account webhooks (oldest first), the events a webhook can listen to (SmartEmailing's 11) and those accepted for compatibility that never fire yet.","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"settings","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountWebhooks"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"operationId":"account_webhooks_create","summary":"Create an account webhook","tags":["Account"],"description":"{url, event, basicAuth?: {login, password}} -> 201 the webhook. Only what happens after the registration is sent. 400 validation url | event | basicAuth, 409 conflict url (the same address and event) | limit.","parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountWebhookInput"}}},"description":"Required by the server: event, url."},"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountWebhook"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/account-webhooks/{webhook_id}":{"delete":{"operationId":"account_webhooks_delete","summary":"Delete an account webhook","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"webhook_id","in":"path","required":true,"description":"Id of the webhook (string of digits).","schema":{"type":"string"}}],"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"x-mcp-confirm":"delete","responses":{"204":{"description":"No content"},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"operationId":"account_webhooks_update","summary":"Edit, switch off or on an account webhook","tags":["Account"],"description":"{url?, event?, active?, basicAuth?}: basicAuth null removes the credentials, {login, password: ''} keeps the password. A changed event starts at the newest item; switching on again clears the errors.","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"webhook_id","in":"path","required":true,"description":"Id of the webhook (string of digits).","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountWebhookInput"}}}},"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountWebhook"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/account-webhooks/{webhook_id}/test":{"post":{"operationId":"account_webhooks_test","summary":"Send a test call of an account webhook now","tags":["Account"],"description":"Sends one test call now (a fictional contact test@example.com, \"test\": true, header X-Postarna-Test: 1): {ok, status, ms, error} with error scheme | dns | address | deadline | network | status. Moves nothing.","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"webhook_id","in":"path","required":true,"description":"Id of the webhook (string of digits).","schema":{"type":"string"}}],"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountWebhookTest"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/billing":{"get":{"operationId":"billing_overview","summary":"Tariff, usage and balance","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"billing","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingOverview"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/billing/cancel":{"get":{"operationId":"billing_cancel_check","summary":"What cancelling the tariff would mean","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"billing","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelInfo"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/billing/invoices":{"get":{"operationId":"billing_invoices","summary":"List invoices","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"from","in":"query","required":false,"schema":{"type":"string"},"description":"Start of the period (YYYY-MM-DD local day, or ISO time where noted)."},{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/pageSize"},{"$ref":"#/components/parameters/q"},{"$ref":"#/components/parameters/sort"},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Status filter."},{"name":"to","in":"query","required":false,"schema":{"type":"string"},"description":"End of the period (YYYY-MM-DD local day, or ISO time where noted)."},{"name":"type","in":"query","required":false,"schema":{"type":"string"}}],"x-postarna-permission":{"module":"billing","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Invoice"}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["items","total","page","pageSize"]}}}},"400":{"description":"`validation` (message: currency, q, sort, status, type)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/billing/invoices/{invoice_id}/pdf":{"get":{"operationId":"billing_invoice_pdf","summary":"Download an invoice (PDF)","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"invoice_id","in":"path","required":true,"description":"Id of the invoice (string of digits).","schema":{"type":"string"}}],"x-postarna-permission":{"module":"billing","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/billing/invoices/{invoice_id}/qr.svg":{"get":{"operationId":"billing_invoice_qr","summary":"QR payment code of an invoice (SVG)","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"invoice_id","in":"path","required":true,"description":"Id of the invoice (string of digits).","schema":{"type":"string"}}],"x-postarna-permission":{"module":"billing","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"image/svg+xml":{"schema":{"type":"string"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/billing/payments":{"get":{"operationId":"billing_payments","summary":"List payments","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"},{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/pageSize"}],"x-postarna-permission":{"module":"billing","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Payment"}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["items","total","page","pageSize"]}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/billing/profile":{"get":{"operationId":"billing_profile","summary":"Get the billing profile","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"billing","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingProfile"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/billing/quote":{"get":{"operationId":"billing_quote","summary":"Price of a tariff","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"currency","in":"query","required":false,"schema":{"type":"string"}},{"name":"period","in":"query","required":false,"schema":{"type":"string"}},{"name":"tierId","in":"query","required":false,"schema":{"type":"string"}}],"x-postarna-permission":{"module":"billing","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingQuote"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/company":{"get":{"operationId":"account_company","summary":"Get the company data","tags":["Account"],"description":"The company holding the account: legal name, IČO, DIČ / IČ DPH (settings Firma).\n\nContract notes (cs):\n\nFirma, která má účet: `{name, companyId, vatId}` (název, IČO, DIČ / IČ DPH). Čtení modul `settings` `read`, změna `full`. Mezery v IČO a DIČ se vypustí, DIČ velkými písmeny (nejvýš 20 písmen a číslic); 400 `validation` s názvem pole. Patičky e-mailů dál berou firmu jednotlivých e-shopů (níže).","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"settings","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountCompany"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"operationId":"account_company_update","summary":"Update the company data","tags":["Account"],"description":"Contract notes (cs):\n\nFirma, která má účet: `{name, companyId, vatId}` (název, IČO, DIČ / IČ DPH). Čtení modul `settings` `read`, změna `full`. Mezery v IČO a DIČ se vypustí, DIČ velkými písmeny (nejvýš 20 písmen a číslic); 400 `validation` s názvem pole. Patičky e-mailů dál berou firmu jednotlivých e-shopů (níže).","parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"companyId":{"type":"string"},"vatId":{"type":"string"}}}}}},"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountCompany"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/consent-settings":{"get":{"operationId":"consent_settings_index","summary":"Consent settings of every shop","tags":["Account"],"description":"Customer exception (soft opt-in) months per shop.\n\nThe customer exception (soft opt-in) of every e-shop: a Slovak shop follows the law's own 12 months unless the tenant sets its own number for it (`months`); any other shop is off unless the tenant turns it on.\n\nContract notes (cs):\n\nZákaznická výjimka (soft opt-in) každého e-shopu: kolik měsíců po poslední dokončené objednávce kontaktu může e-shop ještě posílat obchodní sdělení bez jiného právního důvodu (modul `settings`: čtení GET, plný přístup PATCH). `{ \"items\": [ { \"shopId\": \"12\", \"code\": \"sk\", \"language\": \"sk\", \"months\": 12, \"isDefault\": true } ] }`. `months` je účinná hodnota (`null` = vypnuto); `isDefault` `true` = platí zákonná výchozí hodnota e-shopu (slovenský e-shop 12 měsíců podle zákona č. 452/2021 Z. z. § 116 odst. 16, jiný e-shop vypnuto), `false` = tenant si nastavil vlastní počet (i výslovnou nulu). PATCH tělo `{ \"months\": 6 }` (celé číslo 0 až 120, 0 = výslovně vypnuto) nebo `{ \"months\": null }` (vrátí e-shopu jeho zákonnou výchozí hodnotu); jiná hodnota nebo neznámý e-shop = 400 `validation` s `months`, e-shop jiného tenanta 404.","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"settings","level":"read","keyScope":"read or full"},"x-mcp-tool":"get_consent_settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ConsentSettings"}}},"required":["items"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/consent-settings/{shop_id}":{"patch":{"operationId":"consent_settings_update","summary":"Update the customer exception of a shop","tags":["Account"],"description":"Sets the customer exception months of a shop (0 to 120, 0 = off, null = legal default).\n\nContract notes (cs):\n\nZákaznická výjimka (soft opt-in) každého e-shopu: kolik měsíců po poslední dokončené objednávce kontaktu může e-shop ještě posílat obchodní sdělení bez jiného právního důvodu (modul `settings`: čtení GET, plný přístup PATCH). `{ \"items\": [ { \"shopId\": \"12\", \"code\": \"sk\", \"language\": \"sk\", \"months\": 12, \"isDefault\": true } ] }`. `months` je účinná hodnota (`null` = vypnuto); `isDefault` `true` = platí zákonná výchozí hodnota e-shopu (slovenský e-shop 12 měsíců podle zákona č. 452/2021 Z. z. § 116 odst. 16, jiný e-shop vypnuto), `false` = tenant si nastavil vlastní počet (i výslovnou nulu). PATCH tělo `{ \"months\": 6 }` (celé číslo 0 až 120, 0 = výslovně vypnuto) nebo `{ \"months\": null }` (vrátí e-shopu jeho zákonnou výchozí hodnotu); jiná hodnota nebo neznámý e-shop = 400 `validation` s `months`, e-shop jiného tenanta 404.","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"shop_id","in":"path","required":true,"description":"Id of the shop (string of digits).","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"months":{"type":["number","null"]}},"required":["months"]}}}},"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"x-mcp-tool":"update_consent_settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentSettings"}}}},"400":{"description":"`validation` (message: months)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/grid-tags":{"get":{"operationId":"grid_tags_index","summary":"Labels used in a grid","tags":["Account"],"description":"Labels used in one grid (?grid=lists|segments|campaigns|automations), for the Štítky filter.","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"grid","in":"query","required":false,"schema":{"type":"string"}}],"x-postarna-permission":{"module":null,"level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string"}}},"required":["items"]}}}},"400":{"description":"`validation` (message: grid)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/labels":{"get":{"operationId":"labels_index","summary":"List labels","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"content","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Label"}}},"required":["items"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"operationId":"labels_create","summary":"Create a label","tags":["Account"],"description":"Contract notes (cs):\n\nŠtítky účtu (SE Nastavení › Firma › Štítky, migrace 0150, modul `content`: čtení GET, plný přístup ostatní). `{ \"items\": [ { \"id\", \"name\", \"color\", \"used\", \"createdAt\" } ] }`, `color` = `#rrggbbaa` (malými písmeny; vstup `#rrggbb` dostane `ff`), `used` = počet seznamů, segmentů, kampaní a scénářů se štítkem. POST `{name, color}` → 201; jméno 1 až 40 znaků, bez ohledu na velikost písmen unikátní (jinak 409 `conflict`). PATCH `{name?, color?}`: přejmenování přejmenuje štítek i na záznamech. DELETE štítek ze záznamů odebere → 204. `assign` tělo `{lists?, segments?, campaigns?, automations?: [id]}` (každý druh potřebuje plný přístup ve svém modulu, cizí id 400 `validation`) → `{updated}`.","parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"color":{"type":"string"}},"required":["name","color"]}}},"description":"Required by the server: color, name."},"x-postarna-permission":{"module":"content","level":"full","keyScope":"full"},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Label"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/labels/{label_id}":{"delete":{"operationId":"labels_delete","summary":"Delete a label","tags":["Account"],"description":"Contract notes (cs):\n\nŠtítky účtu (SE Nastavení › Firma › Štítky, migrace 0150, modul `content`: čtení GET, plný přístup ostatní). `{ \"items\": [ { \"id\", \"name\", \"color\", \"used\", \"createdAt\" } ] }`, `color` = `#rrggbbaa` (malými písmeny; vstup `#rrggbb` dostane `ff`), `used` = počet seznamů, segmentů, kampaní a scénářů se štítkem. POST `{name, color}` → 201; jméno 1 až 40 znaků, bez ohledu na velikost písmen unikátní (jinak 409 `conflict`). PATCH `{name?, color?}`: přejmenování přejmenuje štítek i na záznamech. DELETE štítek ze záznamů odebere → 204. `assign` tělo `{lists?, segments?, campaigns?, automations?: [id]}` (každý druh potřebuje plný přístup ve svém modulu, cizí id 400 `validation`) → `{updated}`.","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"label_id","in":"path","required":true,"description":"Id of the label (string of digits).","schema":{"type":"string"}}],"x-postarna-permission":{"module":"content","level":"full","keyScope":"full"},"x-mcp-confirm":"delete","responses":{"204":{"description":"No content"},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"operationId":"labels_update","summary":"Update a label","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"label_id","in":"path","required":true,"description":"Id of the label (string of digits).","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"color":{"type":"string"}}}}}},"x-postarna-permission":{"module":"content","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Label"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/labels/{label_id}/assign":{"post":{"operationId":"labels_assign","summary":"Assign a label to objects","tags":["Account"],"description":"{lists?, segments?, campaigns?, automations?: [ids]} get the label (each kind needs full rights in its module).\n\nContract notes (cs):\n\nŠtítky účtu (SE Nastavení › Firma › Štítky, migrace 0150, modul `content`: čtení GET, plný přístup ostatní). `{ \"items\": [ { \"id\", \"name\", \"color\", \"used\", \"createdAt\" } ] }`, `color` = `#rrggbbaa` (malými písmeny; vstup `#rrggbb` dostane `ff`), `used` = počet seznamů, segmentů, kampaní a scénářů se štítkem. POST `{name, color}` → 201; jméno 1 až 40 znaků, bez ohledu na velikost písmen unikátní (jinak 409 `conflict`). PATCH `{name?, color?}`: přejmenování přejmenuje štítek i na záznamech. DELETE štítek ze záznamů odebere → 204. `assign` tělo `{lists?, segments?, campaigns?, automations?: [id]}` (každý druh potřebuje plný přístup ve svém modulu, cizí id 400 `validation`) → `{updated}`.","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"label_id","in":"path","required":true,"description":"Id of the label (string of digits).","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabelTargets"}}}},"x-postarna-permission":{"module":"content","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"updated":{"type":"number"}},"required":["updated"]}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/maintenance/phone-landline-mobile":{"post":{"operationId":"maintenance_phone_landline_mobile","summary":"Maintenance: move landline-stored mobile numbers to mobile (dry run unless apply)","tags":["Account"],"description":"Owner, 13. 10. 2026: contacts whose phone (landline, \"Pevná linka\") in fact holds a mobile number (core/ phone.py classify_contact_field, from before that module existed) move it into mobile, only while mobile is still empty and nobody edited phone or mobile by hand; a true landline stays. Body {apply}, a dry run by default. 200 {checked, moved, keptLandline, keptEdited, applied}.","parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"apply":{}}}}}},"x-postarna-permission":{"module":"contacts","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"checked":{"type":"integer"},"moved":{"type":"integer"},"keptLandline":{"type":"integer"},"keptEdited":{"type":"integer"},"applied":{"type":"boolean"}},"required":["checked","moved","keptLandline","keptEdited","applied"]}}}},"400":{"description":"`validation` (message: apply)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/maintenance/se-backfill-contacts":{"post":{"operationId":"maintenance_se_backfill","summary":"Maintenance: fill empty contact fields from a SmartEmailing backup (dry run unless apply)","tags":["Account"],"description":"MG-01, AN-01 (core/se_backfill.run_records): body {contacts: [{email, column: value}] (records_to_json, a part of the export is fine), audienceFields: false, shopCustomers: false, apply}. Fills only empty fields; apply also recomputes the engagement grades. A large backfill goes in parts with reach: false and recompute: false (both default true) on all but the last part, so each call stays far under the 60 s request limit. 200 {counts per field ..., automations, applied}.","parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"apply":{},"contacts":{}},"required":["contacts"]}}}},"x-postarna-permission":{"module":"contacts","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"Counts only (never an address), applied (false = dry run) and automations (active scenarios that read what would change). routes_maintenance.py."}}}},"400":{"description":"`validation` (message: apply, contacts)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/maintenance/shop-enrich":{"post":{"operationId":"maintenance_shop_enrich","summary":"Maintenance: fill empty contact fields from the e-shop feeds (dry run unless apply)","tags":["Account"],"description":"Contact data from the e-shop feeds (core/shop_enrich.run): body {apply}. Fills only empty fields from the customer accounts, the delivery data and the shop's language, derives gender, name day and salutations; apply also turns on the ongoing enrichment of the feed imports (phones and billing addresses come with the next whole order export). 200 {contacts, matched, contactsChanged, fill, language, derived, keptEdited, automationReach: [{id, name, nameDay, before, after, new, newPerMonth, newNext30Days}] (mailable contacts that may enter each active repeat automation before and after), ongoingBefore, ongoing, applied}.","parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"apply":{"type":"boolean"}},"required":["apply"]}}}},"x-postarna-permission":{"module":"contacts","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"Counts only (never an address), applied (false = dry run) and automations (active scenarios that read what would change). routes_maintenance.py."}}}},"400":{"description":"`validation` (message: apply, reach)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/maintenance/shop-lists":{"post":{"operationId":"maintenance_shop_lists","summary":"Maintenance: rebuild the e-shop lists (dry run unless apply)","tags":["Account"],"description":"SZ-09, KK-09 (core/shop_lists.sync): body {seBackup: {lists: {se id: name}, members: {se id: [[address, state]]}} (optional), apply}. 200 {counts, lists: [{name, kind, action, members}], automations: active scenarios reading what changes, applied}.","parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"apply":{},"seBackup":{}}}}}},"x-postarna-permission":{"module":"contacts","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"Counts only (never an address), applied (false = dry run) and automations (active scenarios that read what would change). routes_maintenance.py."}}}},"400":{"description":"`validation` (message: apply)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/notifications":{"get":{"operationId":"notifications_list","summary":"List notifications","tags":["Account"],"description":"Notifications of the account (import finished, campaign sent or paused, automation paused...), newest first, with the unread count.\n\nContract notes (cs):\n\n`{ \"items\": [ { \"id\", \"type\", \"params\", \"important\", \"read\", \"createdAt\" } ], \"unread\": 3 }`, nejnovější první. `type`: `import_finished`, `campaign_sent`, `domain_verified`, `bounce_warning`, `export_ready`, `automation_paused`, `list_contacts_added`, `list_unsubscribed`, `campaign_paused`, `automation_notice`, `se_sync_problem` (hodinová synchronizace ze SmartEmailingu neproběhla, důležitá, `{status: failed | late, problem}`). `params` jsou hodnoty pro text `notifications.type.<type>` v `src/locales`; čísla formátuje UI.","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":null,"level":"read","keyScope":"read or full"},"x-mcp-tool":"list_notifications","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationList"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/notifications/delete":{"post":{"operationId":"notifications_delete","summary":"Delete notifications","tags":["Account"],"description":"{ids: [...]} removes those notifications, {all: true} every notification of the tenant (SE \"Smazat vše\").\n\nContract notes (cs):\n\n`{ids: [...]}` smaže ty notifikace tenanta (cizí a neznámá id ignoruje), `{all: true}` všechny (SE „Smazat vše“) → 204; jinak 400 `validation` / `ids`.","parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"all":{"type":"boolean"}},"required":["all"]},{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}}},"required":["ids"]}]}}}},"x-postarna-permission":{"module":null,"level":"read","keyScope":"read or full"},"responses":{"204":{"description":"No content"},"400":{"description":"`validation` (message: ids)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/notifications/read":{"post":{"operationId":"notifications_read","summary":"Mark notifications as read","tags":["Account"],"description":"Contract notes (cs):\n\nTělo `{ \"ids\": [\"n-1\", \"n-2\"] }`. 204. Neznámá id a id jiného tenanta server ignoruje.","parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}}},"required":["ids"]}}},"description":"Required by the server: ids."},"x-postarna-permission":{"module":null,"level":"read","keyScope":"read or full"},"responses":{"204":{"description":"No content"},"400":{"description":"`validation` (message: ids)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/notifications/unread":{"post":{"operationId":"notifications_unread","summary":"Mark notifications as unread","tags":["Account"],"description":"SE \"Označit jako nepřečtené\": {ids: [...]}.","parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}}},"required":["ids"]}}},"description":"Required by the server: ids."},"x-postarna-permission":{"module":null,"level":"read","keyScope":"read or full"},"responses":{"204":{"description":"No content"},"400":{"description":"`validation` (message: ids)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/onboarding":{"get":{"operationId":"onboarding_show","summary":"State of the onboarding wizard","tags":["Account"],"description":"The onboarding wizard's state (core/onboarding.py).","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"settings","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingState"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"operationId":"onboarding_update","summary":"Save the onboarding wizard","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingPatch"}}}},"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingState"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/rfm":{"get":{"operationId":"rfm_state","summary":"State of the RFM analysis","tags":["Account"],"description":"SE GET rfm-analysis/model: Poštárna has no RFM model yet; whether the tenant asked for it.","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"contacts","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RfmState"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/rfm/enable-request":{"post":{"operationId":"rfm_enable_request","summary":"Ask to enable the RFM analysis","tags":["Account"],"description":"SE \"Zapnout RFM analýzu\": records the request (once), switches nothing on.","parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"x-postarna-permission":{"module":"contacts","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RfmState"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/running-actions":{"get":{"operationId":"running_actions_index","summary":"Running background actions (imports, exports ...)","tags":["Account"],"description":"SE \"Probíhající akce\": background work of the tenant that runs or waits to run (core/jobs.running_actions).","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":null,"level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/RunningAction"}}},"required":["items"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/shop-enrich":{"get":{"operationId":"shop_enrich_state","summary":"Whether order feed imports fill empty contact fields","tags":["Account"],"description":"{ongoing}: whether the order feed imports fill empty contact fields as they come (core/shop_enrich.SETTING; off until a member runs the enrichment or turns it on). Nastavení › E-shopy, Údaje kontaktů z e-shopu.","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"contacts","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ongoing":{"type":"boolean"}},"required":["ongoing"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"put":{"operationId":"shop_enrich_switch","summary":"Turn the ongoing contact data enrichment on or off","tags":["Account"],"description":"Body {ongoing: bool}: turns the ongoing enrichment of the order feed imports on or off (audited). Nothing is filled now; the one-time fill is POST /maintenance/shop-enrich. 200 {ongoing}.","parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ongoing":{"type":"boolean"}},"required":["ongoing"]}}},"description":"Required by the server: ongoing."},"x-postarna-permission":{"module":"contacts","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ongoing":{"type":"boolean"}},"required":["ongoing"]}}}},"400":{"description":"`validation` (message: ongoing)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/shop-settings":{"get":{"operationId":"shop_settings_index","summary":"Sending company data of every shop","tags":["Account"],"description":"Sending company of each shop (name, address, IČO).\n\nThe sender company of every e-shop: name, IČO and registered office (footers of e-mails, pages and forms).\n\nContract notes (cs):\n\nOdesílající firma každého e-shopu (Nastavení › Firma, modul `settings`: čtení GET, plný přístup PATCH). `{ \"items\": [ { \"shopId\": \"11\", \"code\": \"cz\", \"displayName\": \"Example CZ\", \"language\": \"cs\", \"companyName\": \"Example s.r.o.\", \"companyId\": \"12345678\", \"companyAddress\": \"Ukázková 1, 110 00 Praha 1\" } ] }`. Patička každé kampaně a automatizace e-mail označí jako obchodní sdělení firmy a jejího webu a na druhém řádku uvede firmu se sídlem (`companyAddress`) a IČO (`companyId`), jen když jsou vyplněné (občanský zákoník § 435); stejné údaje mají patičky veřejných stránek a formulářů. PATCH přijme kterákoli z polí `companyName` (povinný, nejvýš 200 znaků), `companyId` (písmena a číslice, nejvýš 20, mezery se vynechají), `companyAddress` (nejvýš 300 znaků); mezery se sloučí, znaky `{ } < >` a konce řádků = 400 `validation` s názvem pole, neznámé pole taky. Vrací změněnou položku; e-shop jiného tenanta 404.","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"settings","level":"read","keyScope":"read or full"},"x-mcp-tool":"get_shop_settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ShopSettings"}}},"required":["items"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/shop-settings/{shop_id}":{"patch":{"operationId":"shop_settings_update","summary":"Update the sending company data of a shop","tags":["Account"],"description":"Changes the sending company of a shop.\n\nContract notes (cs):\n\nOdesílající firma každého e-shopu (Nastavení › Firma, modul `settings`: čtení GET, plný přístup PATCH). `{ \"items\": [ { \"shopId\": \"11\", \"code\": \"cz\", \"displayName\": \"Example CZ\", \"language\": \"cs\", \"companyName\": \"Example s.r.o.\", \"companyId\": \"12345678\", \"companyAddress\": \"Ukázková 1, 110 00 Praha 1\" } ] }`. Patička každé kampaně a automatizace e-mail označí jako obchodní sdělení firmy a jejího webu a na druhém řádku uvede firmu se sídlem (`companyAddress`) a IČO (`companyId`), jen když jsou vyplněné (občanský zákoník § 435); stejné údaje mají patičky veřejných stránek a formulářů. PATCH přijme kterákoli z polí `companyName` (povinný, nejvýš 200 znaků), `companyId` (písmena a číslice, nejvýš 20, mezery se vynechají), `companyAddress` (nejvýš 300 znaků); mezery se sloučí, znaky `{ } < >` a konce řádků = 400 `validation` s názvem pole, neznámé pole taky. Vrací změněnou položku; e-shop jiného tenanta 404.","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"shop_id","in":"path","required":true,"description":"Id of the shop (string of digits).","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string"},"companyName":{"type":"string"},"companyAddress":{"type":"string"}}}}}},"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"x-mcp-tool":"update_shop_settings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopSettings"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/shops":{"get":{"operationId":"shops","summary":"List shops (e-shops) of the company","tags":["Account"],"description":"Shops (e-shops) of the account with id, code, domain, currency, language.\n\nContract notes (cs):\n\n`{ \"items\": [ { \"id\": \"11\", \"code\": \"cz\", \"displayName\": \"Example CZ\", \"domain\": \"example.cz\", \"currency\": \"CZK\", \"language\": \"cs\" } ] }`","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":null,"level":"read","keyScope":"read or full"},"x-mcp-tool":"list_shops","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Shop"}}},"required":["items"]},"examples":{"getting-started-shops":{"summary":"docs/api-examples/getting-started.json shops","value":{"items":[{"id":"7","code":"cz","displayName":"Example.cz","domain":"example.cz","currency":"CZK","language":"cs","active":true},{"id":"8","code":"sk","displayName":"Example.sk","domain":"example.sk","currency":"EUR","language":"sk","active":true}]}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"operationId":"shops_create","summary":"Create a shop","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopInput"}}}},"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopDetail"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/shops/{shop_id}":{"get":{"operationId":"shops_show","summary":"Get a shop","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"shop_id","in":"path","required":true,"description":"Id of the shop (string of digits).","schema":{"type":"string"}}],"x-postarna-permission":{"module":"settings","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopDetail"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"operationId":"shops_update","summary":"Update a shop","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"shop_id","in":"path","required":true,"description":"Id of the shop (string of digits).","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string"},"companyName":{"type":"string"},"currency":{"type":"string","enum":["CZK","EUR"]},"companyAddress":{"type":"string"},"displayName":{"type":"string"},"domain":{"type":"string"},"webDisplay":{"type":"string"},"language":{"type":"string","enum":["cs","sk"]},"platform":{"type":"string","enum":["shoptet","woocommerce","prestashop","upgates","custom"]},"senderName":{"type":"string"},"senderEmail":{"type":"string"},"linkDomain":{"type":"string"}}}}}},"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopDetail"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/shops/{shop_id}/brand":{"get":{"operationId":"shops_brand","summary":"Get the brand settings of a shop","tags":["Account"],"description":"{logoUrl, logoLink, logoWidth, primaryColor, secondaryColor, textColor, backgroundColor, fontFamily, headingFontFamily}: '' (logoWidth null) when unset; logoLink defaults to https:// and the shop's web address (web_display, else its domain) when unset.\n\nContract notes (cs):\n\nGrafická identita e-shopu (SE „Grafická identita“); blok Logo v Magic editoru se z ní předvyplní. `GET` (modul `content`, čtení) → `{ \"logoUrl\", \"logoLink\", \"logoWidth\", \"primaryColor\", \"secondaryColor\", \"textColor\", \"backgroundColor\", \"fontFamily\", \"headingFontFamily\" }`, nenastavené = `''` (`logoWidth` `null`); `logoLink` bez hodnoty = `https://` a webová adresa e-shopu (`webDisplay`, jinak doména).\n`PUT` (modul `settings`, plný přístup) s libovolnou částí polí: chybějící pole zůstane, `''` (u `logoWidth` `null`) ho smaže. `logoUrl`, `logoLink` = `''` nebo adresa https; barvy `''` nebo `#rrggbb` (ukládají se malými písmeny); `logoWidth` `null` nebo celé číslo 20 až 800; písma `''` nebo text do 100 znaků bez `< > { } ; \"`. Neznámé pole nebo špatná hodnota 400 `validation` s názvem pole, neznámý e-shop 404. Odpověď jako `GET`. Ukládá se do `shops.settings.brand`; vzhled veřejných stránek (logo stránek) se nemění. Audit `shop_brand_changed` jen s názvy polí.","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"shop_id","in":"path","required":true,"description":"Id of the shop (string of digits).","schema":{"type":"string"}}],"x-postarna-permission":{"module":"content","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopBrand"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}},"put":{"operationId":"shops_brand_update","summary":"Replace the brand settings of a shop","tags":["Account"],"description":"Body with any of the brand fields: a missing field is kept, '' (logoWidth null) clears it. logoUrl and logoLink '' or https, colours '' or #rrggbb (stored in lower case), logoWidth null or 20 to 800, fonts at most 100 characters without < > { } ; \". 400 validation <field>. Answers the brand like GET.\n\nContract notes (cs):\n\nGrafická identita e-shopu (SE „Grafická identita“); blok Logo v Magic editoru se z ní předvyplní. `GET` (modul `content`, čtení) → `{ \"logoUrl\", \"logoLink\", \"logoWidth\", \"primaryColor\", \"secondaryColor\", \"textColor\", \"backgroundColor\", \"fontFamily\", \"headingFontFamily\" }`, nenastavené = `''` (`logoWidth` `null`); `logoLink` bez hodnoty = `https://` a webová adresa e-shopu (`webDisplay`, jinak doména).\n`PUT` (modul `settings`, plný přístup) s libovolnou částí polí: chybějící pole zůstane, `''` (u `logoWidth` `null`) ho smaže. `logoUrl`, `logoLink` = `''` nebo adresa https; barvy `''` nebo `#rrggbb` (ukládají se malými písmeny); `logoWidth` `null` nebo celé číslo 20 až 800; písma `''` nebo text do 100 znaků bez `< > { } ; \"`. Neznámé pole nebo špatná hodnota 400 `validation` s názvem pole, neznámý e-shop 404. Odpověď jako `GET`. Ukládá se do `shops.settings.brand`; vzhled veřejných stránek (logo stránek) se nemění. Audit `shop_brand_changed` jen s názvy polí.","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"shop_id","in":"path","required":true,"description":"Id of the shop (string of digits).","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"logoUrl":{"type":"string"},"logoLink":{"type":"string","description":"Where the logo leads; defaults to the shop's web."},"logoWidth":{"type":["number","null"]},"primaryColor":{"type":"string"},"secondaryColor":{"type":"string"},"textColor":{"type":"string"},"backgroundColor":{"type":"string"},"fontFamily":{"type":"string"},"headingFontFamily":{"type":"string"}}}}}},"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopBrand"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/shops/{shop_id}/contact-language":{"put":{"operationId":"shops_contact_language","summary":"Set the default language of new contacts of a shop","tags":["Account"],"description":"SE's Nastavení aplikace › Výchozí jazyk kontaktu (UZ-02) of one shop: {language: cs | sk}; it applies to contacts added from now on by hand, over the API or by a sign-up (migration 0392). 400 validation language, 404 for another shop.","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"shop_id","in":"path","required":true,"description":"Id of the shop (string of digits).","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"language":{"$ref":"#/components/schemas/Lang"}},"required":["language"]}}}},"x-postarna-permission":{"module":"contacts","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Shop"}}}},"400":{"description":"`validation` (message: language)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/shops/{shop_id}/disable":{"post":{"operationId":"shops_disable","summary":"Switch a shop off","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"shop_id","in":"path","required":true,"description":"Id of the shop (string of digits).","schema":{"type":"string"}}],"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopDetail"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/shops/{shop_id}/enable":{"post":{"operationId":"shops_enable","summary":"Switch a shop on","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"shop_id","in":"path","required":true,"description":"Id of the shop (string of digits).","schema":{"type":"string"}}],"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopDetail"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/site-script":{"get":{"operationId":"site_script_index","summary":"Every shop's one script line and connection state","tags":["Account"],"description":"The shops with their one line and connection state (module notes).","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"settings","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SiteScriptShop"}}},"required":["items"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/site-script/{shop_id}":{"patch":{"operationId":"site_script_update","summary":"Switch the checkout newsletter box of a shop","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"shop_id","in":"path","required":true,"description":"Id of the shop (string of digits).","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"checkoutConsent":{"type":"boolean"}},"required":["checkoutConsent"]}}},"description":"Required by the server: checkoutConsent."},"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteScriptShop"}}}},"400":{"description":"`validation` (message: checkoutConsent)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/site-script/{shop_id}/check":{"post":{"operationId":"site_script_check","summary":"Test whether the script is on the shop's homepage","tags":["Account"],"description":"The Test button (module notes): {result, url, state, seenAt}.","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"shop_id","in":"path","required":true,"description":"Id of the shop (string of digits).","schema":{"type":"string"}}],"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteScriptCheck"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/smartemailing":{"get":{"operationId":"smartemailing_state","summary":"State of the SmartEmailing migration","tags":["Account"],"description":"{connection (null before the first connect), migration (the latest run or null)}.\n\nContract notes (cs):\n\n`{ \"connection\": SeConnection | null, \"migration\": SeMigration | null }` (poslední běh).\n• `SeConnection` = `{ login, keyHint, accountId, verifiedAt, lists, options, syncEnabled, syncChangedAt, lastSyncAt, lastSync, syncStatus, syncProblem, syncProblemAt }`. `syncStatus`: `ok`, `skipped` (právě běží přenos, zkusí se znovu za 10 minut), `failed` (poslední běh skončil chybou, `syncProblem` = `credentials`, `unavailable`, `dataKey`, `error`) nebo `late` (zapnutá synchronizace neproběhla 3 hodiny, `syncProblem` = `no_sync` nebo poslední chyba); `syncProblemAt` = od kdy. Změna na `failed` nebo `late` přidá jednu důležitou notifikaci `se_sync_problem`. API klíč se nikdy nevrací, jen `keyHint` (první 3 znaky). `lists` = uložený plán `{ \"<id seznamu SE>\": { role, shop, name } }`.","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"settings","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeState"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/smartemailing/migrations/{migration_id}":{"get":{"operationId":"smartemailing_migration","summary":"Get one SmartEmailing migration run","tags":["Account"],"description":"Contract notes (cs):\n\n`SeMigration` = `{ id, status (queued, running, finished, failed), phase ('', fields, contacts, suppressions, apply, purposes, templates, automations, report), progress { read, planned, applied, done }, plan, counts, report, failed, stopped, failure, createdAt, startedAt, finishedAt }`. UI se ptá každé 2 s, dokud běh nedoběhne. `failure` = druh chyby neúspěšného běhu (`stopped`, `credentials`, `unavailable`, `answer`, `dataKey`, `connection`, `error`; jinak prázdné), nikdy technický text; ten zůstává v databázi a v logu workeru (bez adres a klíčů). `stopped` = běh se přerušil, protože se zastavil worker (jeho úloha už neběží); `POST /migrations` se stejným plánem ho obnoví (stejné `id`, hotové fáze se přeskočí, kontakty pokračují za poslední uloženou dávkou), jiný plán založí nový běh.\n• `report` (`SeReport`, jen počty, nikdy adresa): `rows` (`contacts`, `blacklisted`, `hardbounced`, `unsubscribed` (odhlášení ze seznamů), `listUnsubscribes` (odhlášení ze seznamů, které se nepřenášejí, u kontaktů v Poštárně), `customFields`, `purposes`, `consents`, `templates`, `automations`: `{ key, se, postarna, created?, skipped?, archived?, imagesFailed?, failed? }`), `lists` (`{ id, name, role, seConfirmed, seUnsubscribed, postarnaConfirmed, postarnaUnsubscribed }`; u role `skip` je `postarnaUnsubscribed` počet kontaktů, u kterých si Poštárna odhlášení z toho seznamu pamatuje), `skipped` (`not_in_mapped_lists`, `invalid_address`), `merged` `{ duplicate_address }` (záznamy SE se stejnou adresou sloučené do jednoho kontaktu), `problems` (`[{ code, count, blocking }]`, kódy `blacklistMissing`, `hardbounceMissing`, `unsubscribeMissing`, `listUnsubscribeMissing`, `suppressionMissing` blokují; `duplicatesMerged`, `invalidWithOptOut`, `listUnsubscribeNotInPostarna`, `erased` jen informují), `suppressionDiff` `{ seOnly, postarnaOnly }` a `readyToSend` (blacklist, tvrdé bounce i odhlášení SE jsou všechny v Poštárně, osoba vymazaná na žádost se počítá jako zablokovaná, žádný blokující problém).","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"migration_id","in":"path","required":true,"description":"Id of the migration (string of digits).","schema":{"type":"string"}}],"x-postarna-permission":{"module":"settings","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeMigration"}}}},"400":{"description":"`validation`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/web-tracking":{"get":{"operationId":"web_tracking_index","summary":"Web tracking state of every shop","tags":["Account"],"description":"Shops with the Používat switch, whether a scenario listens to their carts, and the script address.\n\nContract notes (cs):\n\nSE Datové zdroje › Webtracking (migrace 0151). GET (modul `settings`) `{ \"items\": [ { \"shopId\", \"code\", \"name\", \"domain\", \"enabled\", \"listening\", \"scriptUrl\" } ] }`: `enabled` = přepínač Používat (výchozí zapnuto), `listening` = v e-shopu běží scénář se spouštěčem Změna v košíku, `scriptUrl` = adresa `cart.js` pro řádek do patičky. PATCH (plný přístup `settings`) `{enabled: bool}` → 204; vypnutý e-shop košíky z webu neukládá (`web_tracking.record_cart` → `off`). `events` (modul `contacts`, jen čtení): události `cart`, `visit`, `custom` kontaktů tenanta od nejnovější (filtr `type` přijímá i `identification`, typ SE Identifikace; Poštárna ho zatím nezapisuje), `type`, `q` (e-mail), `shopId`, stránkování (max 100); položka `{ \"id\", \"type\", \"data\", \"at\", \"shopId\", \"source\", \"contactId\", \"email\" }`.","parameters":[{"$ref":"#/components/parameters/tenant"}],"x-postarna-permission":{"module":"settings","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WebTrackingShop"}}},"required":["items"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/web-tracking/events":{"get":{"operationId":"web_tracking_events","summary":"List web tracking events","tags":["Account"],"description":"SE grid Identifikováni: ?type=visit|identification|cart|custom, ?q= (e-mail), ?shopId=, paging.\n\nContract notes (cs):\n\nSE Datové zdroje › Webtracking (migrace 0151). GET (modul `settings`) `{ \"items\": [ { \"shopId\", \"code\", \"name\", \"domain\", \"enabled\", \"listening\", \"scriptUrl\" } ] }`: `enabled` = přepínač Používat (výchozí zapnuto), `listening` = v e-shopu běží scénář se spouštěčem Změna v košíku, `scriptUrl` = adresa `cart.js` pro řádek do patičky. PATCH (plný přístup `settings`) `{enabled: bool}` → 204; vypnutý e-shop košíky z webu neukládá (`web_tracking.record_cart` → `off`). `events` (modul `contacts`, jen čtení): události `cart`, `visit`, `custom` kontaktů tenanta od nejnovější (filtr `type` přijímá i `identification`, typ SE Identifikace; Poštárna ho zatím nezapisuje), `type`, `q` (e-mail), `shopId`, stránkování (max 100); položka `{ \"id\", \"type\", \"data\", \"at\", \"shopId\", \"source\", \"contactId\", \"email\" }`.","parameters":[{"$ref":"#/components/parameters/tenant"},{"$ref":"#/components/parameters/page"},{"$ref":"#/components/parameters/pageSize"},{"$ref":"#/components/parameters/q"},{"name":"shopId","in":"query","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}}],"x-postarna-permission":{"module":"contacts","level":"read","keyScope":"read or full"},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/WebTrackingEvent"}},"total":{"type":"number"},"page":{"type":"number"},"pageSize":{"type":"number"}},"required":["items","total","page","pageSize"]}}}},"400":{"description":"`validation` (message: q, type)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tenants/{tenant}/web-tracking/{shop_id}":{"patch":{"operationId":"web_tracking_switch","summary":"Switch web tracking of a shop","tags":["Account"],"description":"Contract notes (cs):\n\nSE Datové zdroje › Webtracking (migrace 0151). GET (modul `settings`) `{ \"items\": [ { \"shopId\", \"code\", \"name\", \"domain\", \"enabled\", \"listening\", \"scriptUrl\" } ] }`: `enabled` = přepínač Používat (výchozí zapnuto), `listening` = v e-shopu běží scénář se spouštěčem Změna v košíku, `scriptUrl` = adresa `cart.js` pro řádek do patičky. PATCH (plný přístup `settings`) `{enabled: bool}` → 204; vypnutý e-shop košíky z webu neukládá (`web_tracking.record_cart` → `off`). `events` (modul `contacts`, jen čtení): události `cart`, `visit`, `custom` kontaktů tenanta od nejnovější (filtr `type` přijímá i `identification`, typ SE Identifikace; Poštárna ho zatím nezapisuje), `type`, `q` (e-mail), `shopId`, stránkování (max 100); položka `{ \"id\", \"type\", \"data\", \"at\", \"shopId\", \"source\", \"contactId\", \"email\" }`.","parameters":[{"$ref":"#/components/parameters/tenant"},{"name":"shop_id","in":"path","required":true,"description":"Id of the shop (string of digits).","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}},"description":"Required by the server: enabled."},"x-postarna-permission":{"module":"settings","level":"full","keyScope":"full"},"responses":{"204":{"description":"No content"},"400":{"description":"`validation` (message: enabled)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"pst_ API key","description":"An API key of the company: Authorization: Bearer pst_... (Nastavení › Datové zdroje › API klíče). Scope read or full, roles of the key."},"basicAuth":{"type":"http","scheme":"basic","description":"HTTP Basic as SmartEmailing: user name = e-mail of an active member of the company, password = the API key."},"oauth2":{"type":"oauth2","description":"OAuth 2.1 for MCP clients (AI assistants) only: authorization code with PKCE S256, dynamic registration.","flows":{"authorizationCode":{"authorizationUrl":"https://www.postarna.cz/oauth/authorize","tokenUrl":"https://www.postarna.cz/oauth/token","refreshUrl":"https://www.postarna.cz/oauth/token","scopes":{"read":"Read only (routes whose permission level is read).","full":"Everything the member's roles allow."}}}}},"parameters":{"tenant":{"name":"tenant","in":"path","required":true,"description":"Public id of the company (tenant), a UUID: GET /api/v3/account-info answers it as data.guid; the app shows it on the API keys page.","schema":{"type":"string","format":"uuid"}},"page":{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1},"description":"Page number, from 1."},"pageSize":{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"description":"Items per page, 1 to 100."},"q":{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200},"description":"Search text (case and diacritics insensitive)."},"sort":{"name":"sort","in":"query","required":false,"schema":{"type":"string"},"description":"Sort fields separated by commas, \"-\" = descending, at most 3 (e.g. name,-id)."}},"headers":{"X-RateLimit-Limit":{"description":"Size of the bucket nearest to running out (2 500 per second bucket or 100 000 daily).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time when that bucket is full again.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"responses":{"Unauthorized":{"description":"401 unauthorized: missing, unknown, revoked, expired or idle API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"unauthorized","message":"api_key"}}}}},"Forbidden":{"description":"403 forbidden: message tenant (another company), scope (read-only key), api_key (person only), or the module the key's roles lack.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"forbidden","message":"scope"}}}}},"RateLimited":{"description":"429 rate_limited: wait Retry-After seconds.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":{"code":"rate_limited","message":"per-second"}}}}}},"schemas":{"AccountCompany":{"type":"object","properties":{"name":{"type":"string"},"companyId":{"type":"string"},"vatId":{"type":"string"}},"required":["name","companyId","vatId"],"description":"The company holding the account (GET /tenants/{t}/company)."},"AccountWebhook":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"event":{"type":"string","enum":["new_contact","updated_contact","unsubscribed_contact","email_delivery_started","delivery_status","sent_email","email_open","email_click","scoring_result_changed","engagement_level_changed","sms_delivery_status"]},"active":{"type":"boolean","description":"false = switched off (by hand, or by itself after errorsLimit errors in a row)."},"silent":{"type":"boolean","description":"Accepted for compatibility, never fires yet."},"timeoutS":{"type":"number"},"basicLogin":{"type":["string","null"],"description":"HTTP Basic user name; the password is never answered."},"lastResponseCode":{"type":["number","null"]},"lastCallAt":{"type":["string","null"]},"errorsInRow":{"type":"number"},"errorsLimit":{"type":"number"},"viaApi":{"type":"boolean","description":"Registered with an API key (API v3)."},"createdAt":{"type":"string"}},"required":["id","url","event","active","silent","timeoutS","basicLogin","lastResponseCode","lastCallAt","errorsInRow","errorsLimit","viaApi","createdAt"],"description":"An account webhook (Nastavení › Datové zdroje › Webhooky; the same rows as API v3 /web-hooks)."},"AccountWebhookInput":{"type":"object","properties":{"url":{"type":"string"},"event":{"type":"string","enum":["new_contact","updated_contact","unsubscribed_contact","email_delivery_started","delivery_status","sent_email","email_open","email_click","scoring_result_changed","engagement_level_changed","sms_delivery_status"]},"active":{"type":"boolean"},"basicAuth":{"type":["object","null"],"properties":{"login":{"type":"string"},"password":{"type":"string"}},"required":["login","password"],"description":"null removes the credentials; password '' keeps the stored password (edit only)."}}},"AccountWebhookTest":{"type":"object","properties":{"ok":{"type":"boolean"},"status":{"type":["number","null"]},"ms":{"type":["number","null"]},"error":{"type":"string"}},"required":["ok","status","ms","error"],"description":"Result of Otestovat: error scheme | dns | address | deadline | network | status ('' when ok)."},"AccountWebhooks":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AccountWebhook"}},"events":{"type":"array","items":{"type":"string","enum":["new_contact","updated_contact","unsubscribed_contact","email_delivery_started","delivery_status","sent_email","email_open","email_click","scoring_result_changed","engagement_level_changed","sms_delivery_status"]}},"silentEvents":{"type":"array","items":{"type":"string","enum":["new_contact","updated_contact","unsubscribed_contact","email_delivery_started","delivery_status","sent_email","email_open","email_click","scoring_result_changed","engagement_level_changed","sms_delivery_status"]}},"limit":{"type":"number"}},"required":["items","events","silentEvents","limit"]},"AppNotification":{"type":"object","properties":{"id":{"type":"string"},"type":{"$ref":"#/components/schemas/NotificationType"},"params":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"}]},"description":"Values for the placeholders of notifications.type.<type>; numbers are formatted by the UI."},"important":{"type":"boolean"},"read":{"type":"boolean"},"createdAt":{"type":"string"}},"required":["id","type","params","important","read","createdAt"]},"BankDetails":{"type":"object","properties":{"account":{"type":"string"},"iban":{"type":"string"}},"required":["account","iban"]},"BillingBlock":{"type":"string","enum":["","free_limit","unpaid"]},"BillingCurrency":{"type":"string","enum":["CZK","EUR"]},"BillingOverview":{"type":"object","properties":{"subscription":{"$ref":"#/components/schemas/Subscription"},"priceList":{"$ref":"#/components/schemas/PriceList"},"profile":{"$ref":"#/components/schemas/BillingProfile"},"bank":{"type":"object","properties":{"CZK":{"anyOf":[{"$ref":"#/components/schemas/BankDetails"},{"type":"null"}]},"EUR":{"anyOf":[{"$ref":"#/components/schemas/BankDetails"},{"type":"null"}]}},"required":["CZK","EUR"],"description":"null = the platform has not set that account yet (\"nenastaveno\")."},"cardPayment":{"type":"string","const":"soon"},"support":{"type":"object","properties":{"email":{"type":"string"},"phone":{"type":"string"}},"required":["email","phone"]}},"required":["subscription","priceList","profile","bank","cardPayment","support"]},"BillingPeriod":{"type":"string","enum":["monthly","annual"]},"BillingProfile":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"billingEmail":{"type":"string"},"phone":{"type":"string"},"isCompany":{"type":"boolean"},"country":{"type":"string"},"companyName":{"type":"string"},"companyId":{"type":"string"},"vatId":{"type":"string"},"vatPayer":{"type":"boolean"},"street":{"type":"string"},"city":{"type":"string"},"zip":{"type":"string"},"currency":{"$ref":"#/components/schemas/BillingCurrency"},"saved":{"type":"boolean"},"complete":{"type":"boolean"},"vatCheck":{"allOf":[{"$ref":"#/components/schemas/VatCheck"}],"description":"The VIES check of the VAT ID (server only; never sent back on save)."}},"required":["firstName","lastName","billingEmail","phone","isCompany","country","companyName","companyId","vatId","vatPayer","street","city","zip","currency"]},"BillingQuote":{"type":"object","properties":{"tier":{"$ref":"#/components/schemas/PriceTier"},"currency":{"$ref":"#/components/schemas/BillingCurrency"},"period":{"$ref":"#/components/schemas/BillingPeriod"},"monthly":{"type":"string"},"net":{"type":"string"},"vatRate":{"type":"string"},"vat":{"type":"string"},"total":{"type":"string"},"reverseCharge":{"type":"boolean"},"annualSaving":{"type":"string"},"beforeDiscount":{"type":["string","null"]},"upgradeNet":{"type":["string","null"]},"change":{"type":"string","enum":["new","upgrade","downgrade","same"],"description":"new = a new subscription (first invoice below), upgrade now, downgrade from the next period, same tier."},"contacts":{"type":"number"},"fits":{"type":"boolean","description":"The contacts fit the tier now (a downgrade is refused otherwise)."},"firstStart":{"type":["string","null"]},"firstEnd":{"type":["string","null"]},"firstNet":{"type":["string","null"]},"firstVat":{"type":["string","null"]},"firstTotal":{"type":["string","null"]}},"required":["tier","currency","period","monthly","net","vatRate","vat","total","reverseCharge","annualSaving","beforeDiscount","upgradeNet","change","contacts","fits","firstStart","firstEnd","firstNet","firstVat","firstTotal"]},"BillingSlice":{"type":"object","properties":{"on":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"net":{"type":"string"}},"required":["on","start","end","net"],"description":"A period and its net price."},"CancelInfo":{"type":"object","properties":{"blockers":{"type":"array","items":{"type":"string","enum":["trial","unpaid","profile","not_active","already"]}},"reasons":{"type":"array","items":{"$ref":"#/components/schemas/CancelReason"}}},"required":["blockers","reasons"]},"CancelReason":{"type":"string","enum":["not_needed","complex","missing_features","bugs","price","communication","other_tool","other"]},"ConsentSettings":{"type":"object","properties":{"shopId":{"type":"string"},"code":{"type":"string"},"language":{"$ref":"#/components/schemas/Lang"},"months":{"type":["number","null"]},"isDefault":{"type":"boolean"}},"required":["shopId","code","language","months","isDefault"],"description":"The customer exception (soft opt-in) of one e-shop (GET /tenants/{t}/consent-settings): how many months after a\ncontact's last completed order the shop may still mail it without another consent basis. months null = off.\nisDefault true = the shop's own law default (12 months for a Slovak shop, off otherwise, SK zákon č. 452/2021\nZ. z. § 116 odst. 16), not a choice the tenant made; false = the tenant's own number (including an explicit 0)."},"Currency":{"type":"string","enum":["CZK","EUR"]},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["conflict","count_mismatch","csrf","empty_segment","expired","forbidden","method_not_allowed","not_found","not_implemented","rate_limited","recently_sent","server","suppression_locked","unauthorized","unavailable","upstream","validation"],"description":"Stable machine readable code (see the error catalog in the guides)."},"message":{"type":"string","description":"The field or the reason (technical, not for people), e.g. \"email\", \"definition.1.0.listId\", \"name\"."},"params":{"type":"object","additionalProperties":true,"description":"Details: issues of a graph, expected and actual counts, retryAfter ..."}}}},"examples":[{"error":{"code":"validation","message":"email"}},{"error":{"code":"conflict","message":"version","params":{"current":4}}}]},"Invoice":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string"},"kind":{"type":"string","enum":["invoice","credit_note"]},"purpose":{"type":"string","enum":["upgrade","subscription","overage","manual","credit"]},"currency":{"$ref":"#/components/schemas/BillingCurrency"},"net":{"type":"string"},"vat":{"type":"string"},"total":{"type":"string"},"vatRate":{"type":"string"},"reverseCharge":{"type":"boolean"},"paidAmount":{"type":"string"},"state":{"type":"string","enum":["cancelled","issued","paid"]},"status":{"$ref":"#/components/schemas/InvoiceStatus"},"issueDate":{"type":"string"},"dueDate":{"type":"string"},"paidAt":{"type":["string","null"]},"sentAt":{"type":["string","null"]},"periodStart":{"type":"string"},"periodEnd":{"type":"string"},"days":{"type":"number","description":"Days after the due date (overdue) or until it (unpaid)."},"creditFor":{"type":["string","null"]},"reminders":{"type":"number"},"hasQr":{"type":"boolean"},"buyerName":{"type":"string"},"tenant":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]}},"required":["id","number","kind","purpose","currency","net","vat","total","vatRate","reverseCharge","paidAmount","state","status","issueDate","dueDate","paidAt","sentAt","periodStart","periodEnd","days","creditFor","reminders","hasQr","buyerName"]},"InvoiceStatus":{"type":"string","enum":["cancelled","unpaid","credit","paid","partial","overdue","due_today"]},"Label":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"used":{"type":"number"},"createdAt":{"type":"string"}},"required":["id","name","color","used","createdAt"],"description":"SE Štítky: a label with its RGBA colour (#rrggbbaa) and how many records carry it."},"LabelTargets":{"type":"object","properties":{"lists":{"type":"array","items":{"type":"string"}},"segments":{"type":"array","items":{"type":"string"}},"campaigns":{"type":"array","items":{"type":"string"}},"automations":{"type":"array","items":{"type":"string"}}}},"Lang":{"type":"string","enum":["cs","sk"]},"NotificationList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AppNotification"}},"unread":{"type":"number"}},"required":["items","unread"]},"NotificationType":{"type":"string","enum":["import_finished","campaign_sent","domain_verified","bounce_warning","export_ready","automation_paused","list_contacts_added","list_unsubscribed","campaign_paused","automation_notice","se_sync_problem","import_waiting","purpose_assigned_list","engagement_computed","contacts_bulk_done","list_merged","list_deleted"]},"OnboardingPatch":{"type":"object","properties":{"step":{"type":"string","enum":["domain","shop","script","feeds","contacts","done"]},"shopId":{"type":"string"},"skip":{"type":"string","enum":["domain","shop","script","feeds","contacts","done"]},"unskip":{"type":"string","enum":["domain","shop","script","feeds","contacts","done"]},"complete":{"type":"boolean"},"dismiss":{"type":"boolean"}}},"OnboardingState":{"type":"object","properties":{"visible":{"type":"boolean","description":"Shown on the dashboard (not finished, not closed; a company without a row only while it has no contact)."},"step":{"type":"string","enum":["domain","shop","script","feeds","contacts","done"]},"skipped":{"type":"array","items":{"type":"string","enum":["domain","shop","script","feeds","contacts","done"]}},"completedAt":{"type":["string","null"]},"dismissedAt":{"type":["string","null"]},"shop":{"type":["object","null"],"properties":{"id":{"type":"string"},"code":{"type":"string"},"domain":{"type":"string"},"webDisplay":{"type":"string"},"name":{"type":"string"},"platform":{"type":"string","enum":["shoptet","woocommerce","prestashop","upgates","custom"]},"state":{"type":"string","enum":["live","quiet","waiting"]},"seenAt":{"type":["string","null"]},"seenHost":{"type":"string"}},"required":["id","code","domain","webDisplay","name","platform","state","seenAt","seenHost"]},"steps":{"type":"object","properties":{"domain":{"type":"boolean"},"shop":{"type":"boolean"},"script":{"type":"boolean"},"feeds":{"type":"boolean"},"contacts":{"type":"boolean"},"done":{"type":"boolean"}},"required":["domain","shop","script","feeds","contacts","done"],"description":"Done from the data itself."},"feeds":{"type":"object","properties":{"orders":{"type":"boolean"},"customers":{"type":"boolean"},"products":{"type":"boolean"}}},"contacts":{"type":"number"},"progress":{"type":"number","description":"Steps of the first five that are done or skipped."},"total":{"type":"number"}},"required":["visible","step","skipped","completedAt","dismissedAt","shop","steps","feeds","contacts","progress","total"]},"OverageDay":{"type":"object","properties":{"day":{"type":"string"},"contacts":{"type":"number"},"over":{"type":"number"},"fromMax":{"type":"number"},"toMax":{"type":"number"},"amount":{"type":"string"}},"required":["day","contacts","over","fromMax","toMax","amount"],"description":"One day over the tier: (price of the tier that fits - price of the tier) / days of the month."},"Payment":{"type":"object","properties":{"id":{"type":"string"},"invoiceId":{"type":"string"},"invoiceNumber":{"type":"string"},"amount":{"type":"string"},"currency":{"$ref":"#/components/schemas/BillingCurrency"},"paidOn":{"type":"string"},"method":{"type":"string","enum":["bank","card","credit_note","manual"]}},"required":["id","invoiceId","invoiceNumber","amount","currency","paidOn","method"]},"PriceList":{"type":"object","properties":{"tiers":{"type":"array","items":{"$ref":"#/components/schemas/PriceTier"}},"annualDiscountPct":{"type":"string"},"vatRate":{"type":"string"},"trialDays":{"type":"number"},"freeContacts":{"type":"number"},"freeEmailsMonth":{"type":"number"},"fairUseSends":{"type":"number"},"currencies":{"type":"array","items":{"$ref":"#/components/schemas/BillingCurrency"}}},"required":["tiers","annualDiscountPct","vatRate","trialDays","freeContacts","freeEmailsMonth","fairUseSends","currencies"]},"PriceTier":{"type":"object","properties":{"id":{"type":"string"},"maxContacts":{"type":"number"},"monthly":{"type":["string","null"],"description":"Net a month in the subscription's currency; null = individual price."},"monthlyCzk":{"type":["string","null"]},"monthlyEur":{"type":["string","null"]},"free":{"type":"boolean"},"active":{"type":"boolean"}},"required":["id","maxContacts","monthly","monthlyCzk","free","active"]},"RfmState":{"type":"object","properties":{"enabled":{"type":"boolean"},"requested":{"type":"boolean"},"requestedAt":{"type":["string","null"]}},"required":["enabled","requested","requestedAt"],"description":"RFM analysis (SE GET rfm-analysis/model): no model in Poštárna yet; whether the company asked for it."},"RunningAction":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["import_run","import_doi","export_run","feed_refresh","order_feed_refresh","se_discover","se_sync_suppressions","engagement_recompute","contacts_bulk","list_merge","list_delete"]},"status":{"type":"string","enum":["queued","running"]},"since":{"type":"string"}},"required":["id","kind","status","since"]},"SeConnection":{"type":"object","properties":{"login":{"type":"string"},"keyHint":{"type":"string","description":"First three characters of the key (the key itself is never returned)."},"accountId":{"type":["string","null"]},"verifiedAt":{"type":"string"},"lists":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SeListChoice"}},"options":{"type":"object","properties":{"purposes":{"type":"boolean"},"templates":{"type":"boolean"},"automations":{"type":"boolean"}}},"syncEnabled":{"type":"boolean","description":"Hourly sync of the parallel run."},"syncChangedAt":{"type":["string","null"]},"lastSyncAt":{"type":["string","null"]},"lastSync":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"}]}},"syncStatus":{"type":"string","enum":["ok","failed","skipped","late"],"description":"ok, skipped (a switch run was queued or running), failed (syncProblem says why) or late (no sync for 3 hours)."},"syncProblem":{"type":"string","description":"credentials, unavailable, dataKey, error, migration_running or no_sync."},"syncProblemAt":{"type":["string","null"]}},"required":["login","keyHint","accountId","verifiedAt","lists","options","syncEnabled","syncChangedAt","lastSyncAt","lastSync"]},"SeListChoice":{"type":"object","properties":{"role":{"type":"string","enum":["optin","member","unsub","skip"]},"shop":{"type":"string","description":"Shop code (cz, sk)."},"name":{"type":"string"}},"required":["role","shop","name"]},"SeMigration":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["queued","running","finished","failed"]},"phase":{"type":"string","enum":["","contacts","purposes","templates","automations","fields","suppressions","apply","report"]},"progress":{"type":"object","properties":{"read":{"type":"number"},"planned":{"type":"number"},"applied":{"type":"number"}}},"plan":{"type":"object","properties":{"lists":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SeListChoice"}},"options":{"type":"object","properties":{"purposes":{"type":"boolean"},"templates":{"type":"boolean"},"automations":{"type":"boolean"}},"required":["purposes","templates","automations"]}}},"counts":{"type":"object","additionalProperties":{"type":"number"}},"report":{"anyOf":[{"$ref":"#/components/schemas/SeReport"},{"type":"null"}]},"failed":{"type":"boolean"},"stopped":{"type":"boolean","description":"The worker stopped before the run finished; starting it again resumes it."},"failure":{"type":"string","enum":["","unavailable","error","stopped","credentials","answer","dataKey","connection"],"description":"The kind of a failed run (SE_RUN_FAILURES), '' otherwise; never the technical text."},"createdAt":{"type":"string"},"startedAt":{"type":["string","null"]},"finishedAt":{"type":["string","null"]}},"required":["id","status","phase","progress","plan","counts","report","failed","createdAt","startedAt","finishedAt"]},"SeProblem":{"type":"object","properties":{"code":{"type":"string","enum":["blacklistMissing","hardbounceMissing","unsubscribeMissing","listUnsubscribeMissing","suppressionMissing","duplicatesMerged","invalidWithOptOut","listUnsubscribeNotInPostarna","erased"]},"count":{"type":"number"},"blocking":{"type":"boolean","description":"true = Poštárna must not send yet (readyToSend false)."}},"required":["code","count","blocking"]},"SeReport":{"type":"object","properties":{"rows":{"type":"array","items":{"$ref":"#/components/schemas/SeReportRow"}},"lists":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["optin","member","unsub","skip"]},"seConfirmed":{"type":"number"},"seUnsubscribed":{"type":"number"},"postarnaConfirmed":{"type":["number","null"]},"postarnaUnsubscribed":{"type":["number","null"]}},"required":["id","name","role","seConfirmed","seUnsubscribed","postarnaConfirmed","postarnaUnsubscribed"]}},"skipped":{"type":"object","additionalProperties":{"type":"number"},"description":"Contacts not taken over and why (not_in_mapped_lists, invalid_address)."},"mapping":{"type":"object","additionalProperties":{"type":"number"}},"merged":{"type":"object","properties":{"duplicate_address":{"type":"number"}},"required":["duplicate_address"],"description":"SmartEmailing records merged into one contact because their addresses are the same."},"problems":{"type":"array","items":{"$ref":"#/components/schemas/SeProblem"}},"suppressionDiff":{"type":"object","properties":{"seOnly":{"type":"number"},"postarnaOnly":{"type":"number"}},"required":["seOnly","postarnaOnly"]},"readyToSend":{"type":"boolean","description":"Blacklist, hard bounces and unsubscribes of SmartEmailing are all in Poštárna: Poštárna may send."}},"required":["rows","lists","skipped","mapping","suppressionDiff","readyToSend"]},"SeReportRow":{"type":"object","properties":{"key":{"type":"string","enum":["unsubscribed","blacklisted","contacts","purposes","templates","automations","hardbounced","listUnsubscribes","customFields","consents"]},"se":{"type":"number"},"postarna":{"type":"number"},"created":{"type":"number"},"skipped":{"type":"number"},"archived":{"type":"number"},"imagesFailed":{"type":"number"},"failed":{"type":"number"}},"required":["key","se","postarna"],"description":"One line of the reconciliation: SmartEmailing against Poštárna (counts only)."},"SeState":{"type":"object","properties":{"connection":{"anyOf":[{"$ref":"#/components/schemas/SeConnection"},{"type":"null"}]},"migration":{"anyOf":[{"$ref":"#/components/schemas/SeMigration"},{"type":"null"}]}},"required":["connection","migration"]},"Shop":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string","description":"cz, sk (ShopSettings.code)"},"displayName":{"type":"string"},"domain":{"type":"string"},"currency":{"$ref":"#/components/schemas/Currency"},"language":{"$ref":"#/components/schemas/Lang"},"active":{"type":"boolean","description":"false = switched off in settings E-shopy (hidden from the switcher and pickers); absent = active."},"contactLanguage":{"type":"string","enum":["cs","sk"],"description":"SE's Výchozí jazyk kontaktu (UZ-02): the language of the shop's new contacts that come without one; until chosen\n(contactLanguageSet false) Czech for a .cz and Slovak for a .sk domain."},"contactLanguageSet":{"type":"boolean"}},"required":["id","code","displayName","domain","currency","language"]},"ShopBrand":{"type":"object","properties":{"logoUrl":{"type":"string"},"logoLink":{"type":"string","description":"Where the logo leads; defaults to the shop's web."},"logoWidth":{"type":["number","null"]},"primaryColor":{"type":"string"},"secondaryColor":{"type":"string"},"textColor":{"type":"string"},"backgroundColor":{"type":"string"},"fontFamily":{"type":"string"},"headingFontFamily":{"type":"string"}},"required":["logoUrl","logoLink","logoWidth","primaryColor","secondaryColor","textColor","backgroundColor","fontFamily","headingFontFamily"],"description":"Brand identity of an e-shop (SmartEmailing \"Grafická identita\"): the Logo element and predefined sections use it."},"ShopConnector":{"type":"object","properties":{"host":{"type":"string"},"intervalS":{"type":"number","description":"Seconds between automatic runs; 0 = only by hand."}},"required":["host","intervalS"],"description":"The connector of orders and customers as the tenant sees it; the platform sets it (its key is the platform's)."},"ShopDetail":{"type":"object","properties":{"webDisplay":{"type":"string"},"platform":{"type":"string","enum":["shoptet","woocommerce","prestashop","upgates","custom"]},"senderName":{"type":"string"},"senderEmail":{"type":"string"},"linkDomain":{"type":"string","description":"Own domain of tracking and unsubscribe links; '' = the platform's."},"companyName":{"type":"string"},"companyId":{"type":"string"},"companyAddress":{"type":"string"},"active":{"type":"boolean","description":"false = switched off in settings E-shopy (hidden from the switcher and pickers); absent = active."},"disabledAt":{"type":["string","null"]},"createdAt":{"type":"string"},"connector":{"anyOf":[{"$ref":"#/components/schemas/ShopConnector"},{"type":"null"}]},"usage":{"$ref":"#/components/schemas/ShopUsage"},"locked":{"type":"boolean","description":"Language and currency are fixed once the shop has contacts, orders, feeds or a sent campaign."},"id":{"type":"string"},"code":{"type":"string","description":"cz, sk (ShopSettings.code)"},"displayName":{"type":"string"},"domain":{"type":"string"},"currency":{"$ref":"#/components/schemas/Currency"},"language":{"$ref":"#/components/schemas/Lang"},"contactLanguage":{"type":"string","enum":["cs","sk"],"description":"SE's Výchozí jazyk kontaktu (UZ-02): the language of the shop's new contacts that come without one; until chosen\n(contactLanguageSet false) Czech for a .cz and Slovak for a .sk domain."},"contactLanguageSet":{"type":"boolean"}},"required":["webDisplay","platform","senderName","senderEmail","linkDomain","companyName","companyId","companyAddress","active","disabledAt","createdAt","connector","usage","locked","id","code","displayName","domain","currency","language"]},"ShopInput":{"type":"object","properties":{"code":{"type":"string"},"displayName":{"type":"string"},"domain":{"type":"string"},"webDisplay":{"type":"string"},"language":{"$ref":"#/components/schemas/Lang"},"currency":{"$ref":"#/components/schemas/Currency"},"platform":{"type":"string","enum":["shoptet","woocommerce","prestashop","upgates","custom"]},"senderName":{"type":"string"},"senderEmail":{"type":"string"},"linkDomain":{"type":"string"},"companyName":{"type":"string"},"companyId":{"type":"string"},"companyAddress":{"type":"string"}},"required":["code","displayName","domain","language","currency","companyName"],"description":"POST /tenants/{t}/shops (code, displayName, domain, language, currency, companyName required) and PATCH (code fixed)."},"ShopSettings":{"type":"object","properties":{"shopId":{"type":"string"},"code":{"type":"string"},"displayName":{"type":"string"},"language":{"$ref":"#/components/schemas/Lang"},"companyName":{"type":"string"},"companyId":{"type":"string"},"companyAddress":{"type":"string"}},"required":["shopId","code","displayName","language","companyName","companyId","companyAddress"],"description":"The sender company of one e-shop (settings Firma, GET /tenants/{t}/shop-settings): every campaign and automation\ne-mail names it in the standard footer, the public pages and forms in theirs. companyId (IČO) and companyAddress\n(registered office) are shown only when filled ('' = not filled)."},"ShopUsage":{"type":"object","properties":{"contacts":{"type":"number"},"lists":{"type":"number"},"segments":{"type":"number"},"campaigns":{"type":"number"},"automationsActive":{"type":"number"},"feeds":{"type":"number"},"orders":{"type":"number"}},"required":["contacts","lists","segments","campaigns","automationsActive","feeds","orders"],"description":"What a shop has (GET /tenants/{t}/shops/{id})."},"SiteScriptCheck":{"type":"object","properties":{"result":{"type":"string","enum":["found","not_found","unreachable"]},"url":{"type":["string","null"]},"state":{"type":"string","enum":["live","quiet","waiting"]},"seenAt":{"type":["string","null"]}},"required":["result","url","state","seenAt"],"description":"The Test button (POST /tenants/{t}/site-script/{shop}/check): found = the line is on the homepage."},"SiteScriptShop":{"type":"object","properties":{"shopId":{"type":"string"},"code":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"webDisplay":{"type":"string"},"platform":{"type":"string","enum":["shoptet","woocommerce","prestashop","upgates","custom"]},"scriptUrl":{"type":"string","description":"The postarna.js address of the one line."},"snippet":{"type":"string","description":"The whole line for the shop's footer."},"state":{"type":"string","enum":["live","quiet","waiting"],"description":"live = the script reported within 3 days, quiet = earlier, waiting = never."},"seenAt":{"type":["string","null"]},"seenHost":{"type":"string"},"checkoutConsent":{"type":"boolean","description":"The script also reads the newsletter box of the checkout and the registration."},"popups":{"type":"number","description":"Active pop-up and slide-in forms the script shows; active classic forms it can place."},"embeds":{"type":"number"},"signups":{"type":"object","properties":{"pending":{"type":"number"},"subscribed":{"type":"number"},"skipped":{"type":"number"},"expired":{"type":"number"}},"required":["pending","subscribed","skipped","expired"],"description":"Checkout newsletter boxes of the last 30 days by state."}},"required":["shopId","code","name","domain","webDisplay","platform","scriptUrl","snippet","state","seenAt","seenHost","checkoutConsent","popups","embeds","signups"]},"Subscription":{"type":"object","properties":{"state":{"$ref":"#/components/schemas/SubscriptionState"},"inTrial":{"type":"boolean"},"trialEndsAt":{"type":["string","null"]},"trialDaysLeft":{"type":"number"},"period":{"$ref":"#/components/schemas/BillingPeriod"},"currency":{"$ref":"#/components/schemas/BillingCurrency"},"tier":{"anyOf":[{"$ref":"#/components/schemas/PriceTier"},{"type":"null"}]},"manual":{"type":"boolean"},"customMonthly":{"type":["string","null"]},"monthly":{"type":["string","null"]},"periodNet":{"type":["string","null"]},"annualMonthly":{"type":["string","null"]},"annualSaving":{"type":["string","null"]},"annualDiscountPct":{"type":"string"},"vatRate":{"type":"string"},"contacts":{"type":"number"},"limit":{"type":["number","null"]},"overBy":{"type":"number"},"contactsChange30d":{"type":["number","null"]},"sentMonth":{"type":"number"},"free":{"type":"boolean"},"freeEmailsMonth":{"type":["number","null"]},"fairUseLimit":{"type":"number"},"fairUseSends":{"type":"number"},"nextInvoiceOn":{"type":["string","null"],"description":"Day the next invoice is issued: at once for the first one, the 2nd of the month for a renewal."},"nextPeriodOn":{"type":["string","null"],"description":"First day of the next (or the waiting) period: a planned lower tier and the renewal apply from it."},"daysToInvoice":{"type":["number","null"]},"periodStart":{"type":["string","null"]},"periodEnd":{"type":["string","null"]},"cancelAt":{"type":["string","null"]},"billingBlock":{"$ref":"#/components/schemas/BillingBlock"},"billingExempt":{"type":"boolean"},"sendingState":{"type":"string"},"paymentMethod":{"type":"string","enum":["bank","card"]},"overageTotal":{"type":["string","null"]},"overageDays":{"type":"number"},"currentSpend":{"type":["string","null"]},"unpaidInvoices":{"type":"number"},"overdueInvoices":{"type":"number"},"ordered":{"type":"boolean","description":"A paid tier is ordered (in the trial: it starts when the trial ends)."},"dueDays":{"type":"number"},"firstInvoice":{"anyOf":[{"$ref":"#/components/schemas/BillingSlice"},{"type":"null"}],"description":"A tier ordered in the trial: its first invoice on the day the trial ends, for the rest of that month (pro rata)."},"nextTier":{"anyOf":[{"$ref":"#/components/schemas/PriceTier"},{"type":"null"}],"description":"Snížit tarif: the lower tier planned from the next period (null = none)."},"nextBilling":{"type":["object","null"],"properties":{"on":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"net":{"type":"string"},"overage":{"type":"string"},"tier":{"anyOf":[{"$ref":"#/components/schemas/PriceTier"},{"type":"null"}]}},"required":["on","start","end","net","overage","tier"],"description":"The next invoice of a running subscription: the tier (the planned lower one) and the overage of a monthly one."},"overageFrom":{"type":["string","null"],"description":"First day of the overage not billed yet (null outside a paid period)."},"overage":{"type":"array","items":{"$ref":"#/components/schemas/OverageDay"},"description":"Days over the tier since overageFrom (SE Příloha k faktuře), billed with the next invoice."}},"required":["state","inTrial","trialEndsAt","trialDaysLeft","period","currency","tier","manual","customMonthly","monthly","periodNet","annualMonthly","annualSaving","annualDiscountPct","vatRate","contacts","limit","overBy","contactsChange30d","sentMonth","free","freeEmailsMonth","fairUseLimit","fairUseSends","nextInvoiceOn","nextPeriodOn","daysToInvoice","periodStart","periodEnd","cancelAt","billingBlock","billingExempt","sendingState","paymentMethod","overageTotal","overageDays","currentSpend","unpaidInvoices","overdueInvoices","ordered","dueDays","firstInvoice","nextTier","nextBilling","overageFrom","overage"]},"SubscriptionState":{"type":"string","enum":["trial","active","past_due","suspended","cancelled","expired"]},"VatCheck":{"type":"object","properties":{"required":{"type":"boolean","description":"An EU company outside CZ that says it is a VAT payer: only then is the VAT ID checked."},"state":{"$ref":"#/components/schemas/VatCheckState"},"vatId":{"type":"string"},"checkedAt":{"type":["string","null"]},"name":{"type":"string","description":"Name and address as VIES returned them; requestIdentifier = the consultation number (evidence)."},"address":{"type":"string"},"requestIdentifier":{"type":"string"},"error":{"type":"string"},"lastValidAt":{"type":["string","null"]},"fallbackUntil":{"type":["string","null"],"description":"Until when an unavailable VIES still allows reverse charge (last valid check + 30 days)."},"reverseCharge":{"type":"boolean"}},"required":["required","state","vatId","checkedAt","name","address","requestIdentifier","error","lastValidAt","fallbackUntil","reverseCharge"]},"VatCheckState":{"type":"string","enum":["not_needed","unchecked","valid","invalid","unavailable"]},"WebTrackingEvent":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["custom","visit","identification","cart"]},"data":{"type":"object","additionalProperties":{}},"at":{"type":"string"},"shopId":{"type":["string","null"]},"source":{"type":"string"},"contactId":{"type":"string"},"email":{"type":"string"}},"required":["id","type","data","at","shopId","source","contactId","email"],"description":"One row of the grid Identifikováni (a tracked event of a contact)."},"WebTrackingShop":{"type":"object","properties":{"shopId":{"type":"string"},"code":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"enabled":{"type":"boolean"},"listening":{"type":"boolean"},"scriptUrl":{"type":"string","description":"The cart.js address for the one line in the shop's footer."}},"required":["shopId","code","name","domain","enabled","listening","scriptUrl"],"description":"SE Datové zdroje › Webtracking: a shop's Používat switch, whether a scenario listens to its carts, the script."}}}}