{"openapi":"3.1.0","info":{"title":"Zalster Feed Processor","description":"\nZalster Feed Processor.\n\nA company's products come in through its **sources** and go out through its\n**output feeds** (decision 201). Three concepts stay separate throughout this\nAPI and must not be conflated:\n\n* **source items** — exactly what a source supplied;\n* **canonical products** — Zalster's channel-neutral model, each from one source;\n* **output feeds** — channel-specific selections and renderings.\n\nA feed source, and every output feed, has exactly one format, CSV or XML.\nRoutes that were a catalog's (``/companies/{company_id}/catalogs/{catalog_id}/…``)\nstill answer, from the company's route that replaced them.\n","version":"0.1.0"},"paths":{"/health/live":{"get":{"tags":["health"],"summary":"Live","operationId":"live_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Live Health Live Get"}}}}}}},"/health/ready":{"get":{"tags":["health"],"summary":"Ready","operationId":"ready_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ready Health Ready Get"}}}}}}},"/auth/login":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","operationId":"logout_auth_logout_post","responses":{"204":{"description":"Successful Response"}}}},"/auth/me":{"get":{"tags":["auth"],"summary":"Me","operationId":"me_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeOut"}}}}}}},"/auth/password":{"post":{"tags":["auth"],"summary":"Set Own Password","description":"Change the password and sign every other session out.","operationId":"set_own_password_auth_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/session":{"get":{"tags":["auth"],"summary":"Session Probe","description":"Like ``/me`` but 200 with null when signed out: the portal's first call.","operationId":"session_probe_auth_session_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/MeOut"},{"type":"null"}],"title":"Response Session Probe Auth Session Get"}}}}}}},"/auth/invitations/{company_id}":{"post":{"tags":["auth"],"summary":"Accept","description":"Join a company that invited you; 404 when there is no such invitation.","operationId":"accept_auth_invitations__company_id__post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["auth"],"summary":"Decline","description":"Say no to a company's invitation: it goes.","operationId":"decline_auth_invitations__company_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/requests/{key}":{"get":{"tags":["oauth"],"summary":"Sign In Request","description":"The sign-in the consent page shows: which app, what it may do, the companies to choose.","operationId":"sign_in_request_oauth_requests__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthRequestOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/requests/{key}/approve":{"post":{"tags":["oauth"],"summary":"Approve Sign In","description":"The person's yes, for the company they chose.","operationId":"approve_sign_in_oauth_requests__key__approve_post","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthApproveIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthAnswerOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/requests/{key}/deny":{"post":{"tags":["oauth"],"summary":"Deny Sign In","description":"The person's no: the app is told.","operationId":"deny_sign_in_oauth_requests__key__deny_post","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthAnswerOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/connected-apps":{"get":{"tags":["oauth"],"summary":"Connected Apps","description":"The apps signed in for this company: an admin sees everyone's, anyone else their own.","operationId":"connected_apps_companies__company_id__connected_apps_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConnectedAppOut"},"title":"Response Connected Apps Companies  Company Id  Connected Apps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/connected-apps/{grant_id}":{"delete":{"tags":["oauth"],"summary":"Disconnect App","description":"End an app's sign-in: an admin anyone's, a person their own. Its tokens stop at once.","operationId":"disconnect_app_companies__company_id__connected_apps__grant_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}},{"name":"grant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Grant Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies":{"get":{"tags":["companies"],"summary":"List Companies","description":"The companies the caller belongs to (an API key sees its one company).","operationId":"list_companies_companies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CompanyOut"},"type":"array","title":"Response List Companies Companies Get"}}}}}},"post":{"tags":["companies"],"summary":"Create Company","description":"Register a company.\n\nThe company starts in ``provisioning`` and has no tenant database yet.\nProvisioning is an explicit operation (``zalia provision-tenant``) rather\nthan a side effect of this call: creating a database is slow, occasionally\nfails, and must be retryable without creating a second company.","operationId":"create_company_companies_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}":{"get":{"tags":["companies"],"summary":"Get Company","operationId":"get_company_companies__company_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/media-token":{"get":{"tags":["companies"],"summary":"Get Media Token","description":"The token behind this company's public media URLs (issued on first use).","operationId":"get_media_token_companies__company_id__media_token_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaTokenOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/media-token/rotate":{"post":{"tags":["companies"],"summary":"Rotate Media Token","description":"Issue a new token; every published media URL stops resolving at once.","operationId":"rotate_media_token_companies__company_id__media_token_rotate_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaTokenOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/overview":{"get":{"tags":["admin"],"summary":"Overview","description":"The platform in numbers: companies, people, what they hold, the last 30 days, queues.","operationId":"overview_admin_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminOverviewOut"}}}}}}},"/admin/companies":{"get":{"tags":["admin"],"summary":"Companies","description":"Every company, newest first, with its owners, people and newest numbers.","operationId":"companies_admin_companies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AdminCompanyOut"},"type":"array","title":"Response Companies Admin Companies Get"}}}}}},"post":{"tags":["admin"],"summary":"Create Company","description":"Make a company and its owner, and queue its database.\n\nThe owner is made as ``create-owner`` makes one: a new account gets a\ntemporary password, returned here once; someone with an account already\nkeeps their password and owns the company at once. 409 ``slug-taken``\nwhen the slug is in use.","operationId":"create_company_admin_companies_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCompanyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCompanyCreatedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/companies/{company_id}/provision":{"post":{"tags":["admin"],"summary":"Provision","description":"Try making a company's database again: one that failed, or never started.\n\n409 ``company-active`` for a company that is active or migrating already.","operationId":"provision_admin_companies__company_id__provision_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminQueuedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/usage/refresh":{"post":{"tags":["admin"],"summary":"Refresh Usage","description":"Count every company's numbers now rather than tonight.","operationId":"refresh_usage_admin_usage_refresh_post","responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminQueuedOut"}}}}}}},"/admin/people":{"get":{"tags":["admin"],"summary":"People","description":"Every person on the platform, by email (decision 234): their companies and\nroles, invitations included, whether they can sign in, and when they last did.","operationId":"people_admin_people_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AdminPersonOut"},"type":"array","title":"Response People Admin People Get"}}}}}}},"/admin/people/{user_id}/reset-password":{"post":{"tags":["admin"],"summary":"Reset Password","description":"A temporary password for someone who forgot theirs, returned once (decision 234).\n\nWhat ``zalia reset-password`` does: their own password stops working, every\nsession they have is signed out, and they choose a new one when they next\nsign in. No email is sent: the admin hands it over. 409 ``platform-admin``\nfor a platform admin, whose password is reset on the server, so that a\nplatform admin's stolen session cannot take another admin's account; 409\n``account-deactivated`` for an account that cannot sign in anyway.","operationId":"reset_password_admin_people__user_id__reset_password_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPasswordResetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/members":{"get":{"tags":["team"],"summary":"Members","operationId":"members_companies__company_id__members_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MemberOut"},"title":"Response Members Companies  Company Id  Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["team"],"summary":"Invite","description":"Add a new person, or invite someone who already has an account (decision 205).\n\nSomeone already here, or already invited, is 409 ``already-member``: a\nrole changes through ``PATCH …/members/{user}``, where only an owner\nchanges an owner.","operationId":"invite_companies__company_id__members_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/members/{user_id}":{"patch":{"tags":["team"],"summary":"Set Role","operationId":"set_role_companies__company_id__members__user_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["team"],"summary":"Remove","description":"Remove a person, or withdraw their invitation; only an owner removes an owner.","operationId":"remove_companies__company_id__members__user_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/api-keys":{"get":{"tags":["team"],"summary":"Api Keys","operationId":"api_keys_companies__company_id__api_keys_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyOut"},"title":"Response Api Keys Companies  Company Id  Api Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["team"],"summary":"New Api Key","operationId":"new_api_key_companies__company_id__api_keys_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreatedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/api-keys/{key_id}":{"delete":{"tags":["team"],"summary":"Revoke","operationId":"revoke_companies__company_id__api_keys__key_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Company Id"}},{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/fields":{"get":{"tags":["company"],"summary":"List Fields","description":"Every path an expression may read, grouped by namespace.\n\nCanonical product fields plus the attribute keys present on active\nproducts, the rule sets' computed fields, the ``asset.*``, ``creative.*``,\n``category.*``, ``company.*`` and ``channel.*`` keys the export produces,\nand the top-level keys of a recent source payload. Examples come from one\nrecent active product.","operationId":"list_fields_companies__company_id__fields_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FieldCatalogue"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/defaults":{"get":{"tags":["company"],"summary":"Defaults","description":"The currency and language most products come in: what new templates start from.","operationId":"defaults_companies__company_id__defaults_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyDefaultsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/sources":{"post":{"tags":["sources"],"summary":"Create Source","operationId":"create_source_companies__company_id__sources_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/FeedSourceCreate"},{"$ref":"#/components/schemas/ShopifySourceCreate"},{"$ref":"#/components/schemas/WooCommerceSourceCreate"},{"$ref":"#/components/schemas/MetaSourceCreate"},{"$ref":"#/components/schemas/TikTokSourceCreate"},{"$ref":"#/components/schemas/SnapchatSourceCreate"},{"$ref":"#/components/schemas/GoogleSourceCreate"}],"title":"Payload"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["sources"],"summary":"List Sources","operationId":"list_sources_companies__company_id__sources_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SourceOut"},"title":"Response List Sources Companies  Company Id  Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/sources/{source_id}/upload":{"post":{"tags":["sources"],"summary":"Upload Source File","description":"Attach a file to an uploaded feed source, streaming it to shared storage.\n\nReplaces any previous upload for the source. Does not inspect or import;\nthose remain explicit steps so the operator sees what they are about to\nactivate.","operationId":"upload_source_file_companies__company_id__sources__source_id__upload_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Source id","title":"Source Id"},"description":"Source id"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_source_file_companies__company_id__sources__source_id__upload_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/sources/{source_id}":{"get":{"tags":["sources"],"summary":"Get Source Detail","operationId":"get_source_detail_companies__company_id__sources__source_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Source id","title":"Source Id"},"description":"Source id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["sources"],"summary":"Update Source","description":"Partial update: name, schedule, missing-item policy, currency, language,\na fetched feed's address, a feed's XML item path, delimiter and encoding,\nimport scope; a Shopify source's ``include_unlisted`` and\n``only_online_store``, a WooCommerce source's ``include_hidden``; a\ncatalog's filters (design 15.0 §5): Meta's ``only_approved`` and\n``feed_id``, TikTok's ``only_available``, Snapchat's ``product_set_id``,\nGoogle's ``data_source_id``, ``feed_label`` and ``content_language``.\n\nA new address (decision 221) keeps the source's products and mapping: a\nrotated token or a moved feed is the same products, and the next import\nreads the new address in full (the address is part of what an import\ncompares, ``core.pipeline.runner.reading_of``).","operationId":"update_source_companies__company_id__sources__source_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Source id","title":"Source Id"},"description":"Source id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["sources"],"summary":"Delete Source Route","description":"Delete the source with its products and their creatives. The body must\nrepeat its exact name; the uploaded file is removed once the deletion has\ncommitted, and the creatives' files by the sweep worker (decision 222).","operationId":"delete_source_route_companies__company_id__sources__source_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Source id","title":"Source Id"},"description":"Source id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceDeleteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceDeletionImpactOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/sources/{source_id}/inspect":{"post":{"tags":["sources"],"summary":"Inspect","description":"Sample the source and suggest a mapping. Never imports or activates.\n\nA shop's sample is its first products, read from its API (design 14.0).","operationId":"inspect_companies__company_id__sources__source_id__inspect_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Source id","title":"Source Id"},"description":"Source id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Inspect Companies  Company Id  Sources  Source Id  Inspect Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/sources/{source_id}/mappings":{"get":{"tags":["sources"],"summary":"List Mappings","operationId":"list_mappings_companies__company_id__sources__source_id__mappings_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Source id","title":"Source Id"},"description":"Source id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MappingVersionOut"},"title":"Response List Mappings Companies  Company Id  Sources  Source Id  Mappings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["sources"],"summary":"Create Mapping","description":"Create the next immutable mapping version.\n\nNever edits an existing version. Re-posting an identical document returns the\nversion that already holds it rather than adding a duplicate.","operationId":"create_mapping_companies__company_id__sources__source_id__mappings_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Source id","title":"Source Id"},"description":"Source id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MappingCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MappingVersionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/sources/{source_id}/test-import":{"post":{"tags":["sources"],"summary":"Run Test Import","description":"Preview a bounded sample through the real pipeline, writing nothing.","operationId":"run_test_import_companies__company_id__sources__source_id__test_import_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Source id","title":"Source Id"},"description":"Source id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestImportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Run Test Import Companies  Company Id  Sources  Source Id  Test Import Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/sources/{source_id}/deletion-impact":{"get":{"tags":["sources"],"summary":"Source Deletion Impact","description":"What deleting this source would take with it: its products, and which\noutput feeds would send nothing.","operationId":"source_deletion_impact_companies__company_id__sources__source_id__deletion_impact_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Source id","title":"Source Id"},"description":"Source id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceDeletionImpactOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/connectors":{"get":{"tags":["connectors"],"summary":"List Connectors","description":"All six connectors, in the order shopify, woocommerce, meta, tiktok, snapchat,\ngoogle: a login connector's login, a shop connector's shops (newest first),\nand the sources reading through each. Three control queries and one of the\ncompany's own.","operationId":"list_connectors_companies__company_id__connectors_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/connectors/{connector}/authorize":{"post":{"tags":["connectors"],"summary":"Authorize","description":"Where to send the browser to sign in to ``connector`` (design 15.0 §3.1): its\nconsent page, with a state naming the company, the person asking and where\nthe portal wants the browser back. ``rerequest`` asks again for what is\nmissing. 409 ``connector-not-configured`` until the platform's app keys are\nset, 400 ``invalid-return-to``, 404 for a shop connector.","operationId":"authorize_companies__company_id__connectors__connector__authorize_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"connector","in":"path","required":true,"schema":{"type":"string","title":"Connector"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AuthorizeIn"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/connectors/{connector}/check":{"post":{"tags":["connectors"],"summary":"Check Login","description":"Read the login's identity and grant again: connected when it works, in error\nwhen the platform refuses (409 ``connector-not-connected`` with no login to\ncheck; 502 when the platform does not answer, the login left as it was).","operationId":"check_login_companies__company_id__connectors__connector__check_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"connector","in":"path","required":true,"schema":{"type":"string","title":"Connector"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/connectors/{connector}":{"delete":{"tags":["connectors"],"summary":"Disconnect Login","description":"End the company's login: its tokens forgotten and, where the platform allows,\nrevoked (TikTok, Google, a person's Meta login). Snapchat's is removed at\naccounts.snapchat.com, a Meta system user's under Business Settings →\nIntegrations. Sources reading through it stay, unread, and say why.","operationId":"disconnect_login_companies__company_id__connectors__connector__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"connector","in":"path","required":true,"schema":{"type":"string","title":"Connector"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/connectors/{connector}/catalogs":{"get":{"tags":["connectors"],"summary":"List Catalogs","description":"The catalogs the login can read, with their feeds (design 15.0 §4), each with\nthe settings a source of it starts with. 409 ``connector-not-connected``, 409\n``connector-missing-permission`` (``missing`` listed); a platform's refusal\nmarks the login in error (409 ``platform-refused``).","operationId":"list_catalogs_companies__company_id__connectors__connector__catalogs_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"connector","in":"path","required":true,"schema":{"type":"string","title":"Connector"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/connectors/shopify/shops":{"post":{"tags":["connectors"],"summary":"Connect Shopify Shop","description":"Where to send the browser to connect a Shopify shop (design 15.0 §3.2): its\nconsent page, with a state naming the company, the shop and the person\nasking. 409 ``connector-not-configured`` until the Shopify app's keys are\nset; 400 ``invalid-shop-domain``, ``invalid-return-to``.","operationId":"connect_shopify_shop_companies__company_id__connectors_shopify_shops_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopifyShopIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/connectors/woocommerce/stores":{"post":{"tags":["connectors"],"summary":"Connect Woocommerce Store","description":"Connect a WooCommerce store (design 15.0 §3.2), once its REST index says it is\na WordPress site with WooCommerce (400 ``store-not-https``,\n``invalid-store-url``, ``not-woocommerce``; 502 ``platform-unreachable``).\n\n``approval``: the company's connection to the store waits (``pending``),\nand ``url`` is the store's approval page, which comes back to the portal's\n``return_to`` with ``connector=woocommerce``, ``shop`` and\n``result=approved``. ``keys``: the store is read once with them (409\n``keys-refused``) and the connection is made at once (``url`` null).","operationId":"connect_woocommerce_store_companies__company_id__connectors_woocommerce_stores_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WooCommerceStoreIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreConnectOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/connectors/shops/{shop_id}/check":{"post":{"tags":["connectors"],"summary":"Check Shop","description":"Read the shop once with the connection's credentials: a pending or failing\nconnection is connected when it works, in error when the shop refuses (409\n``connector-not-connected`` with nothing to check; 502\n``platform-unreachable``, the connection left as it was, when the shop does\nnot answer).","operationId":"check_shop_companies__company_id__connectors_shops__shop_id__check_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"shop_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Shop Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/connectors/shops/{shop_id}/keys":{"post":{"tags":["connectors"],"summary":"New Keys","description":"A new key and secret for a WooCommerce store (permission Read): checked with\none read (409 ``keys-refused``), then kept, sealed. 400 ``wrong-connector`` for\na Shopify shop, which connects through its consent page.","operationId":"new_keys_companies__company_id__connectors_shops__shop_id__keys_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"shop_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Shop Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WooCommerceKeysIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/connectors/shops/{shop_id}":{"delete":{"tags":["connectors"],"summary":"Disconnect Shop","description":"End the connection: its credentials are forgotten, and nothing reads the shop\nuntil it is connected again. The app stays installed in the shop, and a\nWooCommerce key stays in the store, until their owner removes them there.","operationId":"disconnect_shop_companies__company_id__connectors_shops__shop_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"shop_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Shop Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/connectors/meta/callback":{"get":{"tags":["connectors"],"summary":"Meta's way back from its consent page","description":"A platform's consent page sends the browser here (design 15.0 §3.1.2).\n\nThe state is redeemed once and must come back to the person who left;\nthe code is traded with no database session open; identity and grant\nare read; the login is stored (tokens sealed) and audited. The browser\ngoes to the portal's ``return_to`` with ``connector`` and\n``result=connected``, or ``result=error`` and ``reason`` = ``denied``,\n``missing_permissions`` (stored all the same), ``refused`` or\n``failed`` (a link back that does not hold among them).","operationId":"meta_callback_connectors_meta_callback_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The state the consent page was given","title":"State"},"description":"The state the consent page was given"},{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The code to trade for a token","title":"Code"},"description":"The code to trade for a token"},{"name":"auth_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"TikTok's code to trade for a token","title":"Auth Code"},"description":"TikTok's code to trade for a token"},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Set when the consent page was declined","title":"Error"},"description":"Set when the consent page was declined"},{"name":"error_description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Why, in the platform's words","title":"Error Description"},"description":"Why, in the platform's words"}],"responses":{"307":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/connectors/tiktok/callback":{"get":{"tags":["connectors"],"summary":"TikTok's way back from its consent page","description":"A platform's consent page sends the browser here (design 15.0 §3.1.2).\n\nThe state is redeemed once and must come back to the person who left;\nthe code is traded with no database session open; identity and grant\nare read; the login is stored (tokens sealed) and audited. The browser\ngoes to the portal's ``return_to`` with ``connector`` and\n``result=connected``, or ``result=error`` and ``reason`` = ``denied``,\n``missing_permissions`` (stored all the same), ``refused`` or\n``failed`` (a link back that does not hold among them).","operationId":"tiktok_callback_connectors_tiktok_callback_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The state the consent page was given","title":"State"},"description":"The state the consent page was given"},{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The code to trade for a token","title":"Code"},"description":"The code to trade for a token"},{"name":"auth_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"TikTok's code to trade for a token","title":"Auth Code"},"description":"TikTok's code to trade for a token"},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Set when the consent page was declined","title":"Error"},"description":"Set when the consent page was declined"},{"name":"error_description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Why, in the platform's words","title":"Error Description"},"description":"Why, in the platform's words"}],"responses":{"307":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/connectors/snapchat/callback":{"get":{"tags":["connectors"],"summary":"Snapchat's way back from its consent page","description":"A platform's consent page sends the browser here (design 15.0 §3.1.2).\n\nThe state is redeemed once and must come back to the person who left;\nthe code is traded with no database session open; identity and grant\nare read; the login is stored (tokens sealed) and audited. The browser\ngoes to the portal's ``return_to`` with ``connector`` and\n``result=connected``, or ``result=error`` and ``reason`` = ``denied``,\n``missing_permissions`` (stored all the same), ``refused`` or\n``failed`` (a link back that does not hold among them).","operationId":"snapchat_callback_connectors_snapchat_callback_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The state the consent page was given","title":"State"},"description":"The state the consent page was given"},{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The code to trade for a token","title":"Code"},"description":"The code to trade for a token"},{"name":"auth_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"TikTok's code to trade for a token","title":"Auth Code"},"description":"TikTok's code to trade for a token"},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Set when the consent page was declined","title":"Error"},"description":"Set when the consent page was declined"},{"name":"error_description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Why, in the platform's words","title":"Error Description"},"description":"Why, in the platform's words"}],"responses":{"307":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/connectors/google/callback":{"get":{"tags":["connectors"],"summary":"Google's way back from its consent page","description":"A platform's consent page sends the browser here (design 15.0 §3.1.2).\n\nThe state is redeemed once and must come back to the person who left;\nthe code is traded with no database session open; identity and grant\nare read; the login is stored (tokens sealed) and audited. The browser\ngoes to the portal's ``return_to`` with ``connector`` and\n``result=connected``, or ``result=error`` and ``reason`` = ``denied``,\n``missing_permissions`` (stored all the same), ``refused`` or\n``failed`` (a link back that does not hold among them).","operationId":"google_callback_connectors_google_callback_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The state the consent page was given","title":"State"},"description":"The state the consent page was given"},{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The code to trade for a token","title":"Code"},"description":"The code to trade for a token"},{"name":"auth_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"TikTok's code to trade for a token","title":"Auth Code"},"description":"TikTok's code to trade for a token"},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Set when the consent page was declined","title":"Error"},"description":"Set when the consent page was declined"},{"name":"error_description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Why, in the platform's words","title":"Error Description"},"description":"Why, in the platform's words"}],"responses":{"307":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/channels/meta/callback":{"get":{"tags":["connectors"],"summary":"Meta's way back from its consent page, at Phase 5's address","description":"A platform's consent page sends the browser here (design 15.0 §3.1.2).\n\nThe state is redeemed once and must come back to the person who left;\nthe code is traded with no database session open; identity and grant\nare read; the login is stored (tokens sealed) and audited. The browser\ngoes to the portal's ``return_to`` with ``connector`` and\n``result=connected``, or ``result=error`` and ``reason`` = ``denied``,\n``missing_permissions`` (stored all the same), ``refused`` or\n``failed`` (a link back that does not hold among them).","operationId":"meta_channels_callback_channels_meta_callback_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The state the consent page was given","title":"State"},"description":"The state the consent page was given"},{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The code to trade for a token","title":"Code"},"description":"The code to trade for a token"},{"name":"auth_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"TikTok's code to trade for a token","title":"Auth Code"},"description":"TikTok's code to trade for a token"},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Set when the consent page was declined","title":"Error"},"description":"Set when the consent page was declined"},{"name":"error_description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Why, in the platform's words","title":"Error Description"},"description":"Why, in the platform's words"}],"responses":{"307":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/connectors/shopify/callback":{"get":{"tags":["connectors"],"summary":"Shopify Callback","description":"Shopify's consent page sends the browser here (design 14.0; 15.0 §3.2).\n\nChecked in turn: the HMAC of the query, with the app's client secret; the\nshop's address; the state — signed, used once, naming the company and the\nshop — and that the person back is the one who asked (decision 222); that\nShopify came back for the shop the state names. The code is then traded\nfor an expiring offline token, kept sealed as the company's connection to\nthe shop. The browser goes back to the portal's ``return_to`` with\n``connector=shopify``, ``shop`` and ``result=connected``, or\n``result=error`` and ``reason`` = ``denied``, ``refused`` or ``failed``.","operationId":"shopify_callback_connectors_shopify_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The code to trade for a token","title":"Code"},"description":"The code to trade for a token"},{"name":"shop","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The shop, <name>.myshopify.com","title":"Shop"},"description":"The shop, <name>.myshopify.com"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The state the consent page was given","title":"State"},"description":"The state the consent page was given"},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Set when the consent page was declined","title":"Error"},"description":"Set when the consent page was declined"}],"responses":{"307":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/connectors/shopify/install":{"get":{"tags":["connectors"],"summary":"Shopify Install","description":"The Shopify app's URL, where an install from Shopify starts (design 15.0 §3.2).\n\nIts query is Shopify's (checked by its HMAC); the browser goes on to\nConnectors with the shop filled in (``/connectors?connect=shopify&shop=…``),\nwhere one click connects it — nobody types the shop's address.","operationId":"shopify_install_connectors_shopify_install_get","parameters":[{"name":"shop","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The shop, <name>.myshopify.com","title":"Shop"},"description":"The shop, <name>.myshopify.com"}],"responses":{"307":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/connectors/woocommerce/callback":{"post":{"tags":["connectors"],"summary":"Woocommerce Callback","description":"A WooCommerce store's keys, posted once its owner approved (design 14.0; 15.0 §3.2).\n\nThe POST is unsigned and names neither the store nor the company: its\n``user_id`` is the one-time value the approval page was given, which\nnames the company's connection to the store, taken once (400 when unknown,\nused or older than thirty minutes). The keys are kept, sealed, with the\nkey's permission, as ``pending``, and the answer is 200 at once — the store\nwaits for it before sending its owner back, and on a small host a read of\nthe store from here could wait on the store's own busy workers. The\nportal checks them with one read when the browser comes back.","operationId":"woocommerce_callback_connectors_woocommerce_callback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WooCommerceKeysPosted"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Woocommerce Callback Connectors Woocommerce Callback Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/webhooks/shopify":{"post":{"tags":["connectors"],"summary":"Shopify Webhooks","description":"The Shopify app's webhooks (design 14.0), checked by the HMAC of their raw\nbody (401 when it does not match).\n\n``app/uninstalled``: the shop disconnected in every company that connected\nit, its token forgotten. ``shop/redact``: the same, and the sources reading\nit paused. ``customers/data_request`` and ``customers/redact``: Zalia holds\nno customer's data, so there is nothing to send or erase. Answered at once.","operationId":"shopify_webhooks_webhooks_shopify_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/webhooks/meta/deauthorize":{"post":{"tags":["connectors"],"summary":"Meta Deauthorize","description":"A person removed Zalia on Facebook: the logins they signed in are disconnected,\nin every company (the ``signed_request`` checked with the app secret).","operationId":"meta_deauthorize_webhooks_meta_deauthorize_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/webhooks/meta/data-deletion":{"post":{"tags":["connectors"],"summary":"Meta Data Deletion","description":"A person asked for their data to be deleted: the logins they signed in are\ndisconnected and their tokens forgotten — Zalia keeps nothing else of\ntheirs — and Meta is answered with where to see that it was done.","operationId":"meta_data_deletion_webhooks_meta_data_deletion_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/connectors/meta/deletion/{code}":{"get":{"tags":["connectors"],"summary":"Meta Deletion Status","description":"Where a person follows a data deletion request up: received, and done.","operationId":"meta_deletion_status_connectors_meta_deletion__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/webhooks/meta":{"get":{"tags":["connectors"],"summary":"Meta Webhook Subscription","description":"Meta's check of the app's webhook subscription: the challenge is answered when\n``hub.verify_token`` is ``META_WEBHOOK_VERIFY_TOKEN`` (403 otherwise).","operationId":"meta_webhook_subscription_webhooks_meta_get","parameters":[{"name":"hub.mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hub.Mode"}},{"name":"hub.verify_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hub.Verify Token"}},{"name":"hub.challenge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hub.Challenge"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["connectors"],"summary":"Meta Webhooks","description":"The Meta app's webhooks, checked by ``X-Hub-Signature-256`` (401 when it does\nnot match). ``business_integration_uninstall`` (object ``application``): the\nlogins of the business it names are disconnected. Others are answered and\nleft. How the event names the business is unverified against a live app:\n``business_id`` or ``client_business_id``, in the change's value.","operationId":"meta_webhooks_webhooks_meta_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/companies/{company_id}/sources/{source_id}/imports":{"post":{"tags":["imports"],"summary":"Start Full Import","description":"Queue a full import.\n\nReturns 202 with the run in ``pending``: the API process never parses a\nsource itself, so a slow or enormous one cannot occupy a request worker.\nPoll the returned id for progress.","operationId":"start_full_import_companies__company_id__sources__source_id__imports_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Source id","title":"Source Id"},"description":"Source id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportStartRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportRunOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/imports/{import_id}/retry":{"post":{"tags":["imports"],"summary":"Retry Failed Import","description":"Queue a new run for a failed or blocked import.\n\n``override_gate=true`` is how an operator publishes past a product-loss\nblock after confirming the drop is intended. It never overrides an empty or\nwholly invalid source.","operationId":"retry_failed_import_companies__company_id__imports__import_id__retry_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"import_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Import Id"}},{"name":"override_gate","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Override Gate"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportRunOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/imports/{import_id}/changes":{"get":{"tags":["imports"],"summary":"Get Import Changes","description":"Everything this import changed, field by field: the products before versus after.","operationId":"get_import_changes_companies__company_id__imports__import_id__changes_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"import_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Import Id"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ChangeKind"},{"type":"null"}],"title":"Kind"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportChangesOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/imports":{"get":{"tags":["imports"],"summary":"List Imports","description":"The newest imports, of every source or of ``source_id`` (``feed_id`` before).\n\n``per_source`` gives each source's newest ``per_source`` runs instead,\nhowever long ago they were, newest first (decision 210): read from the\ncompany's newest 25, a source that had not imported lately looked as\nthough it never had, and its failed last import asked nothing.","operationId":"list_imports_companies__company_id__imports_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"source_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Id"}},{"name":"feed_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"deprecated":true,"title":"Feed Id"},"deprecated":true},{"name":"per_source","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":25,"minimum":1},{"type":"null"}],"title":"Per Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ImportRunOut"},"title":"Response List Imports Companies  Company Id  Imports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/imports/{import_id}":{"get":{"tags":["imports"],"summary":"Get Import","operationId":"get_import_companies__company_id__imports__import_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"import_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Import Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportRunOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/imports/{import_id}/errors":{"get":{"tags":["imports"],"summary":"Get Import Errors","operationId":"get_import_errors_companies__company_id__imports__import_id__errors_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"import_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Import Id"}},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ImportErrorLevel"},{"type":"null"}],"title":"Level"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ImportErrorOut"},"title":"Response Get Import Errors Companies  Company Id  Imports  Import Id  Errors Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/products":{"get":{"tags":["products"],"summary":"List Products","description":"Find products. Without the three filters below, every product of every source.\n\n``source_id`` keeps one source's products, still supplied or since retired\n(``is_active`` narrows it). ``product_set_id`` keeps the set's members:\nactive products of its sources, matched by the set matcher over the same\nproducts its ``product_count`` counts, so list and count agree.\n``template_id`` keeps the products of the sources the template makes\ncreatives for (decision 202): the editor's products. ``image=failed`` keeps\nthe products an image failed to download for (decision 221), with any of\nthe others.","operationId":"list_products_companies__company_id__products_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}},{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"}},{"name":"availability","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Availability"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"item_group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Group Id"}},{"name":"min_price","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Min Price"}},{"name":"max_price","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Max Price"}},{"name":"source_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Only the products of this source.","title":"Source Id"},"description":"Only the products of this source."},{"name":"source_feed_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Deprecated: ``source_id``.","deprecated":true,"title":"Source Feed Id"},"description":"Deprecated: ``source_id``.","deprecated":true},{"name":"product_set_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Only the products in this product set, as the set counts them.","title":"Product Set Id"},"description":"Only the products in this product set, as the set counts them."},{"name":"template_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Only the products of the sources this template makes creatives for.","title":"Template Id"},"description":"Only the products of the sources this template makes creatives for."},{"name":"image","in":"query","required":false,"schema":{"anyOf":[{"const":"failed","type":"string"},{"type":"null"}],"description":"``failed``: only the products with an image whose download failed, as the Images page counts them.","title":"Image"},"description":"``failed``: only the products with an image whose download failed, as the Images page counts them."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"external_id","title":"Sort"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_ProductListItem_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/products/worst-cases":{"get":{"tags":["products"],"summary":"List Worst Cases","description":"The products that test a template hardest: the longest title, the highest\nprice, no cutout… one product per case, across every active product (or one\nset's, or those of the sources a template makes creatives for — decision\n202). A case the products have nothing to say about is left out.","operationId":"list_worst_cases_companies__company_id__products_worst_cases_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"product_set_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Only among this product set's products.","title":"Product Set Id"},"description":"Only among this product set's products."},{"name":"template_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Only among the products this template makes creatives for.","title":"Template Id"},"description":"Only among the products this template makes creatives for."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorstCasesOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/products/values":{"get":{"tags":["products"],"summary":"List Field Values","description":"Distinct values of one field on active products, with counts, biggest first.\n\nFor the value picker in the product-set editor: ``product.<column>`` for\nthe canonical string columns, ``product.attributes.<key>``, or\n``category.value`` (each source's effective category field). A ``GROUP\nBY`` in the database, never a scan in Python.","operationId":"list_field_values_companies__company_id__products_values_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"field","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":500,"title":"Field"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FieldValuesOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/products/{product_id}":{"get":{"tags":["products"],"summary":"Get Product","operationId":"get_product_companies__company_id__products__product_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/products/{product_id}/sent-with":{"get":{"tags":["products"],"summary":"Get Product Sent With","description":"Each template an active output feed names, and what they send of it for this product.\n\nThe product page's answer to \"why has it no creative from that template\"\n(decision 137): the same reading a run of what the feeds send makes.","operationId":"get_product_sent_with_companies__company_id__products__product_id__sent_with_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductSentOut"},"title":"Response Get Product Sent With Companies  Company Id  Products  Product Id  Sent With Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/products/{product_id}/changes":{"get":{"tags":["products"],"summary":"Get Product Changes","operationId":"get_product_changes_companies__company_id__products__product_id__changes_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductChangeOut"},"title":"Response Get Product Changes Companies  Company Id  Products  Product Id  Changes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/products/{product_id}/quicklook":{"get":{"tags":["products"],"summary":"Quicklook","description":"One product through some rules and every output feed.\n\n``computed`` here answers \"what would this rule set produce\", which is what\nthe rules editor asks; each feed's row underneath answers \"what would this\nfeed write\", and that one goes through the feed's *own* sets. The two can\nlegitimately differ, and that is the model working, not a bug.","operationId":"quicklook_companies__company_id__products__product_id__quicklook_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}},{"name":"rule_set_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Evaluate only this rule set. Omitted: every set, in name order — the authoring view, not what any one feed sees.","title":"Rule Set Id"},"description":"Evaluate only this rule set. Omitted: every set, in name order — the authoring view, not what any one feed sees."},{"name":"theme","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"none, scheduled (the default: the company's theme now) or a theme's id","title":"Theme"},"description":"none, scheduled (the default: the company's theme now) or a theme's id"},{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"draw as at this moment, with a time zone; now when left out","title":"At"},"description":"draw as at this moment, with a time zone; now when left out"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuicklookOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/product-facets/brands":{"get":{"tags":["products"],"summary":"List Brands","description":"Distinct brands, for the products' filter dropdown.","operationId":"list_brands_companies__company_id__product_facets_brands_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response List Brands Companies  Company Id  Product Facets Brands Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/product-sets":{"get":{"tags":["product-sets"],"summary":"List Product Sets","operationId":"list_product_sets_companies__company_id__product_sets_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductSetOut"},"title":"Response List Product Sets Companies  Company Id  Product Sets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["product-sets"],"summary":"Create Product Set","operationId":"create_product_set_companies__company_id__product_sets_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSetCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/product-sets/preview":{"post":{"tags":["product-sets"],"summary":"Preview Product Set","description":"Count what a condition matches and show the first few, writing nothing.\n\nEvaluated with the very context the export uses to pick a template, so\nthe number on the page is the number the feed will act on.","operationId":"preview_product_set_companies__company_id__product_sets_preview_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSetPreviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSetPreviewOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/product-sets/{product_set_id}":{"get":{"tags":["product-sets"],"summary":"Get One","operationId":"get_one_companies__company_id__product_sets__product_set_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"product_set_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Product set id","title":"Product Set Id"},"description":"Product set id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["product-sets"],"summary":"Update Product Set","operationId":"update_product_set_companies__company_id__product_sets__product_set_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"product_set_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Product set id","title":"Product Set Id"},"description":"Product set id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductSetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["product-sets"],"summary":"Delete Product Set","description":"Delete a set. A set an output feed sends, or a template rule names, is in use (409).","operationId":"delete_product_set_companies__company_id__product_sets__product_set_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"product_set_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Product set id","title":"Product Set Id"},"description":"Product set id"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/output-feeds/{output_feed_id}/template-rules":{"get":{"tags":["product-sets"],"summary":"Template Rules","description":"The feed's rules in resolution order. The feed's own ``template_id`` is\nnot among them: it is the default underneath, applied when no rule matches.","operationId":"template_rules_companies__company_id__output_feeds__output_feed_id__template_rules_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TemplateRuleOut"},"title":"Response Template Rules Companies  Company Id  Output Feeds  Output Feed Id  Template Rules Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["product-sets"],"summary":"Set Template Rules","description":"Replace the feed's rules. The list order *is* the resolution order.","operationId":"set_template_rules_companies__company_id__output_feeds__output_feed_id__template_rules_put","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TemplateRuleIn"},"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TemplateRuleOut"},"title":"Response Set Template Rules Companies  Company Id  Output Feeds  Output Feed Id  Template Rules Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/categories":{"get":{"tags":["categories"],"summary":"List Categories","description":"Every distinct category value on active products, biggest first.\n\nDerived from the products themselves — there is no table of a merchant's\ncategories, only the field each source's import mapping wrote — so a\ncategory appears here the moment a product carries it and disappears when\nthe last one does. The fields are resolved once and handed to both the\nlist and the coverage, so the two cannot describe different fields.","operationId":"list_categories_companies__company_id__categories_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryListOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["categories"],"summary":"Set Mapping","description":"Map one merchant category value onto one taxonomy category.","operationId":"set_mapping_companies__company_id__categories_put","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryMappingCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryMappingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["categories"],"summary":"Clear Mapping","description":"Unmap one category value. Its products go back to whatever the feed said.","operationId":"clear_mapping_companies__company_id__categories_delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryMappingClear"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/categories/coverage":{"get":{"tags":["categories"],"summary":"Get Coverage","description":"How many category values, and how many products, are mapped.","operationId":"get_coverage_companies__company_id__categories_coverage_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryCoverageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/categories/sources":{"get":{"tags":["categories"],"summary":"Get Sources","description":"For each source: which field its categories come from, and every field that could.","operationId":"get_sources_companies__company_id__categories_sources_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CategorySourceOut"},"title":"Response Get Sources Companies  Company Id  Categories Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/categories/sources/{source_id}":{"put":{"tags":["categories"],"summary":"Set Source","description":"Say which product field holds a source's categories.\n\n``null`` puts it back to detecting one. Nothing is re-imported and no\nproduct changes: this only moves which field every reader looks at, so the\nlist, the coverage and the next export all follow immediately.","operationId":"set_source_companies__company_id__categories_sources__source_id__put","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"source_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Source id","title":"Source Id"},"description":"Source id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategorySourceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategorySourceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/categories/taxonomy":{"get":{"tags":["categories"],"summary":"Search Taxonomy","description":"Search Google's product taxonomy, best match first, capped.\n\nServed from the fixture shipped in the image; nothing here reaches the\nnetwork. An empty query returns the first categories rather than all 5,595\nof them, so the picker has something to show before anyone types.","operationId":"search_taxonomy_companies__company_id__categories_taxonomy_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"query","in":"query","required":false,"schema":{"type":"string","maxLength":200,"description":"Words to match","default":"","title":"Query"},"description":"Words to match"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxonomySearchOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/rule-sets":{"get":{"tags":["rule-sets"],"summary":"List Rule Sets","operationId":"list_rule_sets_companies__company_id__rule_sets_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RuleSetOut"},"title":"Response List Rule Sets Companies  Company Id  Rule Sets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["rule-sets"],"summary":"Create Rule Set","operationId":"create_rule_set_companies__company_id__rule_sets_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSetCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/rule-sets/{rule_set_id}":{"get":{"tags":["rule-sets"],"summary":"Get One","operationId":"get_one_companies__company_id__rule_sets__rule_set_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"rule_set_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Rule set id","title":"Rule Set Id"},"description":"Rule set id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["rule-sets"],"summary":"Update Rule Set","operationId":"update_rule_set_companies__company_id__rule_sets__rule_set_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"rule_set_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Rule set id","title":"Rule Set Id"},"description":"Rule set id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["rule-sets"],"summary":"Delete Rule Set","description":"Deleting a set removes it from every template and feed that selected it.\n\nWhich is why the list says how many that is: this is the one destructive\nact in the feature, and it reaches further than the page you are on.","operationId":"delete_rule_set_companies__company_id__rule_sets__rule_set_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"rule_set_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Rule set id","title":"Rule Set Id"},"description":"Rule set id"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/rule-sets/{rule_set_id}/versions":{"get":{"tags":["rule-sets"],"summary":"List Versions","operationId":"list_versions_companies__company_id__rule_sets__rule_set_id__versions_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"rule_set_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Rule set id","title":"Rule Set Id"},"description":"Rule set id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RuleVersionOut"},"title":"Response List Versions Companies  Company Id  Rule Sets  Rule Set Id  Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["rule-sets"],"summary":"Create Version","description":"Store the next immutable version of this set; never edits one in place.","operationId":"create_version_companies__company_id__rule_sets__rule_set_id__versions_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"rule_set_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Rule set id","title":"Rule Set Id"},"description":"Rule set id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleVersionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleVersionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/rule-sets":{"get":{"tags":["rule-sets"],"summary":"Template Selection","operationId":"template_selection_companies__company_id__templates__template_id__rule_sets_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSetSelection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["rule-sets"],"summary":"Set Template Selection","description":"Replace the template's selection. The list order *is* the merge order.","operationId":"set_template_selection_companies__company_id__templates__template_id__rule_sets_put","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSetSelection"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSetSelection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/output-feeds/{output_feed_id}/rule-sets":{"get":{"tags":["rule-sets"],"summary":"Output Feed Selection","operationId":"output_feed_selection_companies__company_id__output_feeds__output_feed_id__rule_sets_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSetSelection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["rule-sets"],"summary":"Set Output Feed Selection","description":"Replace the feed's selection. The list order *is* the merge order.","operationId":"set_output_feed_selection_companies__company_id__output_feeds__output_feed_id__rule_sets_put","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSetSelection"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSetSelection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/channels":{"get":{"tags":["output feeds"],"summary":"List Channels","description":"Channel presets: columns, required columns, and the default mapping.","operationId":"list_channels_channels_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Channels Channels Get"}}}}}}},"/companies/{company_id}/output-feeds":{"post":{"tags":["output feeds"],"summary":"Create","description":"Create an output feed with the channel preset's mapping as version 1 and a public URL.","operationId":"create_companies__company_id__output_feeds_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutputFeedCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutputFeedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["output feeds"],"summary":"List Output Feeds","operationId":"list_output_feeds_companies__company_id__output_feeds_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OutputFeedOut"},"title":"Response List Output Feeds Companies  Company Id  Output Feeds Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/output-feeds/{output_feed_id}":{"get":{"tags":["output feeds"],"summary":"Get Output Feed Detail","operationId":"get_output_feed_detail_companies__company_id__output_feeds__output_feed_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutputFeedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["output feeds"],"summary":"Update","operationId":"update_companies__company_id__output_feeds__output_feed_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutputFeedUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutputFeedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["output feeds"],"summary":"Delete Output Feed","description":"Delete an output feed. The body must repeat its exact name.\n\nIts mapping versions and export runs cascade; the public URL starts\nanswering 404 immediately, which is the point — a channel still polling it\nshould notice. Its exported files go once the deletion has committed\n(decision 222): they stayed on the export volume for good.","operationId":"delete_output_feed_companies__company_id__output_feeds__output_feed_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutputFeedDeleteRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/output-feeds/{output_feed_id}/rotate-token":{"post":{"tags":["output feeds"],"summary":"Rotate Token","description":"Issue a new public URL and revoke the old one.\n\nA feed registered on Meta is registered again with the new URL (decision\n216): Meta kept fetching the revoked one and got nothing, and the catalog\nwent stale without a word. If Meta cannot be told, the rotation stands —\nit is usually why someone rotated — and ``settings.meta_republish_error``\nsays so until the feed is published to Meta again.","operationId":"rotate_token_companies__company_id__output_feeds__output_feed_id__rotate_token_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutputFeedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/output-feeds/{output_feed_id}/mappings":{"get":{"tags":["output feeds"],"summary":"List Mappings","operationId":"list_mappings_companies__company_id__output_feeds__output_feed_id__mappings_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OutputMappingVersionOut"},"title":"Response List Mappings Companies  Company Id  Output Feeds  Output Feed Id  Mappings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["output feeds"],"summary":"Create Mapping","operationId":"create_mapping_companies__company_id__output_feeds__output_feed_id__mappings_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutputMappingCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutputMappingVersionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/output-feeds/{output_feed_id}/preview":{"post":{"tags":["output feeds"],"summary":"Preview","description":"Render a handful of products exactly as the export would, writing nothing.\n\n``rule_set_ids`` lets the page try a different selection before saving it;\nomitted, the preview uses the sets the feed has actually selected — which is\nwhat makes preview and export agree. Products are let through the same way:\nby the product set the feed sends, read now, or by its own filter\n(``feed_selection``), unless ``filter_document`` tries another filter first.","operationId":"preview_companies__company_id__output_feeds__output_feed_id__preview_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"},{"name":"theme","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"none, scheduled (the default: the company's theme now) or a theme's id","title":"Theme"},"description":"none, scheduled (the default: the company's theme now) or a theme's id"},{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"draw as at this moment, with a time zone; now when left out","title":"At"},"description":"draw as at this moment, with a time zone; now when left out"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/output-feeds/{output_feed_id}/exports":{"post":{"tags":["output feeds"],"summary":"Run Export Now","description":"Queue a render of this output feed on the worker.\n\n``{\"override_gate\": true}`` publishes a file the drop check would hold\n(decision 216) — after a person has looked at why the last one was held.","operationId":"run_export_now_companies__company_id__output_feeds__output_feed_id__exports_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ExportStartRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportRunOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["output feeds"],"summary":"List Exports","operationId":"list_exports_companies__company_id__output_feeds__output_feed_id__exports_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExportRunOut"},"title":"Response List Exports Companies  Company Id  Output Feeds  Output Feed Id  Exports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/output-feeds/{output_feed_id}/exports/{export_id}":{"get":{"tags":["output feeds"],"summary":"Get Export","operationId":"get_export_companies__company_id__output_feeds__output_feed_id__exports__export_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"export_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Export Id"}},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportRunOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/output-feeds/{output_feed_id}/exports/{export_id}/errors":{"get":{"tags":["output feeds"],"summary":"Get Export Errors","operationId":"get_export_errors_companies__company_id__output_feeds__output_feed_id__exports__export_id__errors_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"export_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Export Id"}},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExportErrorOut"},"title":"Response Get Export Errors Companies  Company Id  Output Feeds  Output Feed Id  Exports  Export Id  Errors Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/output-feeds/{output_feed_id}/publish":{"post":{"tags":["output feeds"],"summary":"Publish To Channel","description":"Register this feed's public URL as a product feed on the connected Meta catalog.\n\nIdempotent: a feed already registered is updated in place.","operationId":"publish_to_channel_companies__company_id__output_feeds__output_feed_id__publish_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"output_feed_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Output feed id","title":"Output Feed Id"},"description":"Output feed id"},{"name":"interval","in":"query","required":false,"schema":{"type":"string","pattern":"^(HOURLY|DAILY|WEEKLY)$","default":"HOURLY","title":"Interval"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishFeedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/feeds/{token}":{"head":{"tags":["public"],"summary":"Public Feed","operationId":"public_feed_public_feeds__token__head","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["public"],"summary":"Public Feed","operationId":"public_feed_public_feeds__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/media/{token}/renders/{cache_key}.{ext}":{"head":{"tags":["public"],"summary":"Public Render","description":"A rendered creative by cache key. Content-addressed, so it is immutable.","operationId":"public_render_public_media__token__renders__cache_key___ext__head","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"cache_key","in":"path","required":true,"schema":{"type":"string","title":"Cache Key"}},{"name":"ext","in":"path","required":true,"schema":{"type":"string","title":"Ext"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["public"],"summary":"Public Render","description":"A rendered creative by cache key. Content-addressed, so it is immutable.","operationId":"public_render_public_media__token__renders__cache_key___ext__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"cache_key","in":"path","required":true,"schema":{"type":"string","title":"Cache Key"}},{"name":"ext","in":"path","required":true,"schema":{"type":"string","title":"Ext"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/media/{token}/cutouts/{content_hash}.png":{"head":{"tags":["public"],"summary":"Public Cutout","description":"The current *approved* cutout of an asset. A pending or rejected cutout is 404.\n\nFeeds written before decision 209 point here; since then they name the\ncut-out itself (``public_cutout_version``).","operationId":"public_cutout_public_media__token__cutouts__content_hash__png_head","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"content_hash","in":"path","required":true,"schema":{"type":"string","title":"Content Hash"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["public"],"summary":"Public Cutout","description":"The current *approved* cutout of an asset. A pending or rejected cutout is 404.\n\nFeeds written before decision 209 point here; since then they name the\ncut-out itself (``public_cutout_version``).","operationId":"public_cutout_public_media__token__cutouts__content_hash__png_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"content_hash","in":"path","required":true,"schema":{"type":"string","title":"Content Hash"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/media/{token}/cutouts/{content_hash}/{derivative_id}.png":{"head":{"tags":["public"],"summary":"Public Cutout Version","description":"One cut-out of an asset, while it is approved (decision 209).\n\nA channel keeps a picture by its URL, so a cut-out replaced or approved\nbehind one URL was never fetched again: the feed names the cut-out it\nsends, and a new one is a new URL. What it names never changes; once\nrejected it is 404.","operationId":"public_cutout_version_public_media__token__cutouts__content_hash___derivative_id__png_head","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"content_hash","in":"path","required":true,"schema":{"type":"string","title":"Content Hash"}},{"name":"derivative_id","in":"path","required":true,"schema":{"type":"string","title":"Derivative Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["public"],"summary":"Public Cutout Version","description":"One cut-out of an asset, while it is approved (decision 209).\n\nA channel keeps a picture by its URL, so a cut-out replaced or approved\nbehind one URL was never fetched again: the feed names the cut-out it\nsends, and a new one is a new URL. What it names never changes; once\nrejected it is 404.","operationId":"public_cutout_version_public_media__token__cutouts__content_hash___derivative_id__png_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"content_hash","in":"path","required":true,"schema":{"type":"string","title":"Content Hash"}},{"name":"derivative_id","in":"path","required":true,"schema":{"type":"string","title":"Derivative Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/media/{token}/images/{content_hash}.{ext}":{"head":{"tags":["public"],"summary":"Public Image","description":"The product photo as stored: the normalised derivative, else the original.\n\n``ext`` is the original's extension (what ``MediaUrls.image`` was built\nwith); the normalised derivative is always a PNG and is served as one.","operationId":"public_image_public_media__token__images__content_hash___ext__head","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"content_hash","in":"path","required":true,"schema":{"type":"string","title":"Content Hash"}},{"name":"ext","in":"path","required":true,"schema":{"type":"string","title":"Ext"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["public"],"summary":"Public Image","description":"The product photo as stored: the normalised derivative, else the original.\n\n``ext`` is the original's extension (what ``MediaUrls.image`` was built\nwith); the normalised derivative is always a PNG and is served as one.","operationId":"public_image_public_media__token__images__content_hash___ext__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"content_hash","in":"path","required":true,"schema":{"type":"string","title":"Content Hash"}},{"name":"ext","in":"path","required":true,"schema":{"type":"string","title":"Ext"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/media/{token}/logo":{"head":{"tags":["public"],"summary":"Public Logo","operationId":"public_logo_public_media__token__logo_head","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["public"],"summary":"Public Logo","operationId":"public_logo_public_media__token__logo_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/media/{token}/banners/{banner_id}.png":{"head":{"tags":["public"],"summary":"Public Banner","description":"A banner drawn on request (decision 238), until it expires. One never changes.","operationId":"public_banner_public_media__token__banners__banner_id__png_head","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"banner_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Banner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["public"],"summary":"Public Banner","description":"A banner drawn on request (decision 238), until it expires. One never changes.","operationId":"public_banner_public_media__token__banners__banner_id__png_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"banner_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Banner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets":{"get":{"tags":["assets"],"summary":"List Assets","description":"Assets referenced by the company's (active) products, newest first.\n\n``q`` keeps the pictures of products whose title, id or brand contains it,\nas the products list's search matches them — the grid used to filter only\nthe page it had loaded (design 8.0). ``kind`` keeps the product photos or\nthe lifestyle pictures (decision 203).\n\nDecision 218: ``review=pending_review`` also finds a picture whose newer\ncut-out waits beside the one in use (``waiting``), and ``order=risk`` puts\nfirst the cut-outs most likely to be wrong — failed checks, then the most\nproblems, then the softest edges — so a reviewer's first minutes go where\nthey count. A ``review`` filter leaves out lifestyle photos (decision 241):\ntheir cut-outs are not reviewed.\n\nDecision 265: ``order=uncertain`` puts first the pictures the automatic sort\nwas least sure of — the sorting view's order — and the ones a person sorted\nlast, since their sort is final.","operationId":"list_assets_companies__company_id__assets_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"review","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ReviewStatus"},{"type":"null"}],"title":"Review"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetStatus"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":60,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Q"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PictureKind"},{"type":"null"}],"title":"Kind"}},{"name":"order","in":"query","required":false,"schema":{"enum":["newest","risk","uncertain"],"type":"string","default":"newest","title":"Order"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetListItem"},"title":"Response List Assets Companies  Company Id  Assets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets/status":{"get":{"tags":["assets"],"summary":"Processing Status","description":"Where the company's images are in the pipeline, for the Assets page.\n\nCounts active references on active products by processing status, the\nmost common download failures, cutouts awaiting review, and the download\njob under way — enough to tell \"nothing queued\" from \"the worker is busy\"\nfrom \"the CDN is down\", and to pause or stop the downloads (decision 98).","operationId":"processing_status_companies__company_id__assets_status_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Processing Status Companies  Company Id  Assets Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets/work":{"get":{"tags":["assets"],"summary":"Image Work","description":"What downloading, cutting out, or both would take on now (decision 230).\n\nThe Images page asks before it offers the choice: how many pictures each\ntakes and the batches of ``image_job_max_items`` they make, and what holds\neach kind of work already.","operationId":"image_work_companies__company_id__assets_work_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageWorkPreview"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["assets"],"summary":"Start Image Work","description":"Download, cut out, or both, as batches queued at once (decision 230).\n\nEvery picture is listed now, ``image_job_max_items`` to a batch, and each\nbatch is a row on Activity: the first of each kind starts, the rest wait\ntheir turn. Downloading and cutting out follows each download batch with a\ncut-out batch for what it brought in, after the pictures already here.\n``everything`` (decision 237) takes every image again: each link fetched\nagain, every product photo cut out again, and with both each download\nbatch cut out again after it. 409 ``image-job-running`` while either kind\nasked for is under way or queued; 400 when neither is asked for.","operationId":"start_image_work_companies__company_id__assets_work_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageWorkRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageWorkStarted"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets/{asset_id}":{"get":{"tags":["assets"],"summary":"Get Asset","operationId":"get_asset_companies__company_id__assets__asset_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["assets"],"summary":"Set Kind","description":"Sort a picture as a product photo or a lifestyle one (decision 203).\n\nA person's choice is final: sorting never changes it again. A lifestyle\npicture is left out of every cut-out run from now on, and since decision\n241 out of review too: a cut-out it has stays stored, unused and unreviewed,\nso sorting a picture as lifestyle is the third answer to \"is this cut-out\nright?\". Sorted back as a product photo, its cut-out is reviewed and used\nas before; one without a cut-out is waiting to be cut out.","operationId":"set_kind_companies__company_id__assets__asset_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetKindUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetKindOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets/{asset_id}/files/{kind}":{"get":{"tags":["assets"],"summary":"Get Asset File","description":"Stream a file through the API: ``original``, ``normalized``, ``mask``,\n``cutout``, or ``thumb`` (a small WebP of the current cutout, made on\nfirst request and cached in storage — grids must not pull 400 kB PNGs).\n``photo`` makes the thumb the photo's, whatever cut-out the picture has: the\nsorting view judges what a picture shows, not its cut-out (decision 265).\n\nObject storage is internal; the browser reaches it only through here.\nPublic URLs for channels are the ``/public/media`` routes.\n\nA file that never changes — the original, or a derivative named by its id\n— is cached for a day. Any other — the thumbnail, \"the cutout\", \"the\nmask\" — is the current one of the moment, and is checked each time: an\napproval or an upload changed it, and the grid showed the old one for an\nhour (decision 209). The check is answered 304 while it has not changed.","operationId":"get_asset_file_companies__company_id__assets__asset_id__files__kind__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}},{"name":"derivative_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Derivative Id"}},{"name":"photo","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Photo"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets/{asset_id}/derivatives/{derivative_id}/review":{"post":{"tags":["assets"],"summary":"Review","operationId":"review_companies__company_id__assets__asset_id__derivatives__derivative_id__review_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"derivative_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Derivative Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDerivativeOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets/{asset_id}/replace":{"post":{"tags":["assets"],"summary":"Replace","description":"Upload a hand-made cutout (transparent PNG) as the current, approved one.","operationId":"replace_companies__company_id__assets__asset_id__replace_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"note","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_replace_companies__company_id__assets__asset_id__replace_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDerivativeOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets/process":{"post":{"tags":["assets"],"summary":"Process Images","description":"Download every image reference (all of them, or one product's) that has no asset.\n\nAll of them is an image job. One product's few pictures go straight to the\nworker, as they always did.","operationId":"process_images_companies__company_id__assets_process_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"product_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Process Images Companies  Company Id  Assets Process Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets/cutouts":{"post":{"tags":["assets"],"summary":"Request Cutouts","description":"Remove backgrounds on request rather than on arrival.\n\nDownloading and normalising happen automatically; this is the expensive\nhalf. ``scope=new`` covers only the products the latest published import\nadded, which is the common case after a refresh.","operationId":"request_cutouts_companies__company_id__assets_cutouts_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"scope","in":"query","required":false,"schema":{"enum":["all","new"],"type":"string","default":"all","title":"Scope"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Request Cutouts Companies  Company Id  Assets Cutouts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets/recheck":{"post":{"tags":["assets"],"summary":"Recheck Images","description":"Re-verify the company's stored images against their origins now.\n\nThe same selection the worker runs after every published import: every\nreference whose asset was checked more than ``IMAGE_RECHECK_MIN_AGE`` ago\n(or never), plus every ``referenced`` or ``failed`` one. Each queued\ndownload is conditional, so an unchanged picture costs one request.","operationId":"recheck_images_companies__company_id__assets_recheck_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Recheck Images Companies  Company Id  Assets Recheck Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets/downloads/stop":{"post":{"tags":["assets"],"summary":"Stop Downloads","description":"Stop downloading the company's pictures (decision 98).\n\nThe download job under way stops, and every picture still queued to\ndownload is let go, so a message already in the broker does nothing when\nit arrives. Pictures a worker has in hand finish. With nothing under way it\nstops nothing, and says so.","operationId":"stop_downloads_companies__company_id__assets_downloads_stop_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Stop Downloads Companies  Company Id  Assets Downloads Stop Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets/reprocess":{"post":{"tags":["assets"],"summary":"Reprocess Images","description":"Cut out again every asset the active pictures use, as an image job.\n\nAdds new derivatives; nothing reviewed is overwritten. By default skips\nassets whose current cutout a person approved or uploaded\n(``assets_to_recut``), so a processor upgrade never quietly undoes review\nwork — pass ``only_unreviewed=false`` to include them (they still keep\ntheir approved cutout as current). ``scope=white`` takes only the\ncut-outs the white knockout made, which the model's replace (decision 235).\n``scope=review`` takes the Needs review list, each picture not yet cut out\nwith the review model, and cuts them out with it on the fine worker\n(decision 255): 409 ``review-model-off`` where the deployment has none. With\na body's ``asset_ids`` it takes those pictures instead, the ones a person\nselected (decision 256). Either leaves out what a batch of it has in hand;\nbehind one under way it waits its turn (``waiting``).","operationId":"reprocess_images_companies__company_id__assets_reprocess_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"only_unreviewed","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Only Unreviewed"}},{"name":"scope","in":"query","required":false,"schema":{"enum":["all","white","review"],"type":"string","default":"all","title":"Scope"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ReprocessChoice"},{"type":"null"}],"title":"Choice"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reprocess Images Companies  Company Id  Assets Reprocess Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/assets/{asset_id}/reprocess":{"post":{"tags":["assets"],"summary":"Reprocess","description":"Run the current processor again, producing a new derivative.\n\nNot for a lifestyle picture (decision 203): 409 ``lifestyle-picture`` — sort\nit as a product photo first. ``review_model`` cuts it out with the review\nmodel instead, on the fine worker (decision 255): 409 ``review-model-off``\nwhere the deployment has none.","operationId":"reprocess_companies__company_id__assets__asset_id__reprocess_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"review_model","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Review Model"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Reprocess Companies  Company Id  Assets  Asset Id  Reprocess Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/banners":{"post":{"tags":["banners"],"summary":"Create Banner","description":"A banner: the headline, subline, call to action and badge asked for, the chosen\nproducts' own pictures with their names and prices, the brand's logo, colours and\nfaces, on a kit colour or a picture sent as a ``data:`` URI. Drawn now and kept\nbehind ``image_url`` until ``expires_at``. ``preview: true`` adds a small JPEG of\nit, base64, for a chat to show. 400 for products that are not active or a picture\nthat cannot be read; 503 ``banner-busy`` when the render worker cannot draw it in time.","operationId":"create_banner_companies__company_id__banners_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BannerRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BannerOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/banners/drawn":{"post":{"tags":["banners"],"summary":"Draw Banner","description":"A banner drawn as its layers (decision 252) — any layer, property, outline or element,\nin one of the shapes' frames or one ``width`` by ``height`` — with the chosen products\nread as ``banner.products[n].<field>`` and written in now. Checked as a template is: a\nlayer that cannot be drawn is a 400 saying where and how (``problems``). Kept behind\n``image_url`` as any banner.","operationId":"draw_banner_companies__company_id__banners_drawn_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrawnBannerRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BannerOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/heroes":{"get":{"tags":["heroes"],"summary":"List Heroes","description":"The company's heroes, the latest changed first.","operationId":"list_heroes_companies__company_id__heroes_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/HeroSummaryOut"},"title":"Response List Heroes Companies  Company Id  Heroes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["heroes"],"summary":"Make Hero","description":"A new hero, as a draft: its drawing checked as a template is — a refusal says where, as\n``/frames/wide/layers/3`` — and its settings, any left out at their defaults. With\n``publish`` a website can show it at once; ``preview`` adds a small JPEG of its wide frame's\nfirst page, base64, for a chat to show.","operationId":"make_hero_companies__company_id__heroes_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeroRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeroOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/heroes/{hero_id}":{"get":{"tags":["heroes"],"summary":"Get Hero","operationId":"get_hero_companies__company_id__heroes__hero_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"hero_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hero Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeroOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["heroes"],"summary":"Change Hero","description":"The draft changed: a website shows the change only once it is published —\n``publish: true`` does it with the change.","operationId":"change_hero_companies__company_id__heroes__hero_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"hero_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hero Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeroUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeroOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["heroes"],"summary":"Remove Hero","operationId":"remove_hero_companies__company_id__heroes__hero_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"hero_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hero Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/heroes/{hero_id}/publish":{"post":{"tags":["heroes"],"summary":"Publish Hero","description":"What a website shows becomes the draft, as it is now.","operationId":"publish_hero_companies__company_id__heroes__hero_id__publish_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"hero_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hero Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeroOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/heroes/{hero_id}/unpublish":{"post":{"tags":["heroes"],"summary":"Unpublish Hero","description":"A website shows nothing: its link answers 404 until the hero is published again.","operationId":"unpublish_hero_companies__company_id__heroes__hero_id__unpublish_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"hero_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hero Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeroOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/heroes/{hero_id}/preview":{"get":{"tags":["heroes"],"summary":"Preview Hero","description":"The draft's page, live, for Zalia's own frame: what a website will show once published.","operationId":"preview_hero_companies__company_id__heroes__hero_id__preview_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"hero_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hero Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/heroes/{hero_id}/image.png":{"get":{"tags":["heroes"],"summary":"Hero Image","description":"A page of the draft as a PNG, drawn by the render worker when it has not been.","operationId":"hero_image_companies__company_id__heroes__hero_id__image_png_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"hero_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Hero Id"}},{"name":"frame","in":"query","required":false,"schema":{"enum":["wide","tall"],"type":"string","default":"wide","title":"Frame"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":0,"default":0,"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/template-starters":{"get":{"tags":["creatives"],"summary":"List Starters","operationId":"list_starters_template_starters_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Starters Template Starters Get"}}}}}}},"/safe-zones":{"get":{"tags":["creatives"],"summary":"List Safe Zones","description":"Where each placement's own interface covers a picture, and where the numbers come from.\n\nThe editor draws them over the page and the product checks test text and\nlogos against them; both read this one list.","operationId":"list_safe_zones_safe_zones_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SafeZoneOut"},"type":"array","title":"Response List Safe Zones Safe Zones Get"}}}}}}},"/template-schema":{"get":{"tags":["creatives"],"summary":"List Template Schemas","description":"The template document's versions, the one to write, and where each schema is.","operationId":"list_template_schemas_template_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Template Schemas Template Schema Get"}}}}}}},"/template-schema/outline":{"post":{"tags":["creatives"],"summary":"Outline Document","description":"Any document in outline (decision 193), checked first as a save checks it:\na script outlines what it holds before it saves it.","operationId":"outline_document_template_schema_outline_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Outline Document Template Schema Outline Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/template-schema/operations":{"get":{"tags":["creatives"],"summary":"Operations Schema","description":"What a batch of operations on a draft is (decision 194), as JSON Schema 2020-12.","operationId":"operations_schema_template_schema_operations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/template-schema/problems":{"get":{"tags":["creatives"],"summary":"Template Problem Codes","description":"Every code a refused document's problems may carry, what it means and what\ngenerally puts it right (decision 192): the codes are a contract, so a script\nmay branch on them.","operationId":"template_problem_codes_template_schema_problems_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Template Problem Codes Template Schema Problems Get"}}}}}}},"/template-schema/{version}":{"get":{"tags":["creatives"],"summary":"Template Schema","description":"One version's JSON Schema (2020-12), every property described, for scripts and agents.\n\nIt is the schema a saved document meets, with each property's words,\ndefault and examples, the expression grammar and every operation in\n``$defs``. The ETag names the revision; a request that sends it back gets a\n304 until the schema changes.","operationId":"template_schema_template_schema__version__get","parameters":[{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates":{"get":{"tags":["creatives"],"summary":"List Templates","operationId":"list_templates_companies__company_id__templates_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TemplateOut"},"title":"Response List Templates Companies  Company Id  Templates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["creatives"],"summary":"Create","description":"A new template, from a starter or a document; published as its first version, or\nwith ``publish`` false kept as its draft until a person publishes it (decision 242).","operationId":"create_companies__company_id__templates_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/compose":{"post":{"tags":["creatives"],"summary":"Compose Design","description":"A design laid out on a picture, as a template document in the brand (decision 242).\n\nEach part — words, the product's picture, its price, a sale badge, the logo, a\nlibrary picture, a shape, a button, a built-in element — is placed by shares of\nthe picture and becomes a layer that reads the product where it shows one, its\ncolours and words linked to the brand kit; each format is laid out from the\npicture. Nothing is saved: create a template with the document, or save it as a\ndraft. 400 ``invalid-design`` names the part that cannot be made, and why.","operationId":"compose_design_companies__company_id__templates_compose_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateDesignIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateDesignOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/layout":{"post":{"tags":["creatives"],"summary":"Lay Out Design","description":"A design from words, made in every format in the brand (decision 243).\n\nA ``layout`` — one of the compositions designers made: ``studio``, ``field``,\n``split``, ``poster``, ``minimal``, ``photo``, ``card`` — and its slots: an\n``eyebrow``, a ``headline``, a ``subline``, a ``cta``, a ``badge``; whether the\n``price`` and the product's ``title`` show; a ``theme`` (``auto``, ``light``,\n``dark``, ``brand``); and options for the ``product``, the ``background`` and the\n``decor``. Zalia sets the words in the brand's faces, measured, each in a colour that\nreads on what it stands on, and checks the document as any save is. Nothing is\nsaved. 400 ``invalid-design`` names what cannot be made, and where.","operationId":"lay_out_design_companies__company_id__templates_layout_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateDesignOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}":{"get":{"tags":["creatives"],"summary":"Get Template","operationId":"get_template_companies__company_id__templates__template_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["creatives"],"summary":"Update Template","operationId":"update_template_companies__company_id__templates__template_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["creatives"],"summary":"Delete Template Route","description":"Delete a template for good, with its renders (decision 201). The body must\nrepeat its exact name (400 ``deletion-refused``); a template an output feed, a\ntemplate rule or an experiment uses is 409 ``template-in-use``. The answer says\nhow many renders and files went with it.","operationId":"delete_template_route_companies__company_id__templates__template_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateDeleteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderDeleteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/versions":{"get":{"tags":["creatives"],"summary":"List Versions","operationId":"list_versions_companies__company_id__templates__template_id__versions_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TemplateVersionOut"},"title":"Response List Versions Companies  Company Id  Templates  Template Id  Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["creatives"],"summary":"Create Version","operationId":"create_version_companies__company_id__templates__template_id__versions_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateVersionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateVersionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/outline":{"get":{"tags":["creatives"],"summary":"Template Outline","description":"The template in outline (``core/creatives/outline.py``): what a script or an\nagent reads first, each layer and value in the compact form.\n\nOf the draft when there is one, else the published version (``of`` picks\none); ``revision`` is the draft's, 0 without one — the revision a change of\nthe draft is made against; ``editor_url`` opens it in the portal's editor.","operationId":"template_outline_companies__company_id__templates__template_id__outline_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"of","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(draft|published)$"},{"type":"null"}],"title":"Of"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Template Outline Companies  Company Id  Templates  Template Id  Outline Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/draft":{"get":{"tags":["creatives"],"summary":"Get Draft","description":"The template's working copy; null when the published version is all there is.\n\nNull rather than 404: no draft is the usual state of a template, and a\nbrowser logs every 404 as an error.","operationId":"get_draft_companies__company_id__templates__template_id__draft_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TemplateDraftOut"},{"type":"null"}],"title":"Response Get Draft Companies  Company Id  Templates  Template Id  Draft Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["creatives"],"summary":"Save Draft","description":"Save the working copy as the editor goes. Never rendered, never exported.\n\nRefused (409 ``draft-changed``) when the copy is not of the latest draft,\nand (409 ``draft-gone``) when its draft was published or discarded since;\n``force`` saves it anyway. The published document again is no draft.","operationId":"save_draft_companies__company_id__templates__template_id__draft_put","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateDraftSave"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateDraftSavedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["creatives"],"summary":"Discard Draft","description":"Throw the draft away: the published version is what the editor opens again.","operationId":"discard_draft_companies__company_id__templates__template_id__draft_delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"revision","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Revision"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/draft/operations":{"post":{"tags":["creatives"],"summary":"Operate On Draft","description":"Change the draft by operations (decision 194), all or none, against the revision read.\n\nThe request is ``OPERATIONS_SCHEMA`` (``GET /template-schema/operations``); a request\nthat is none is a 400 ``invalid-operations``, as is an operation that cannot be\napplied; a document they make that is no template, a 400 ``invalid-template``; a\nrevision that is not the draft's, a 409. The answer gives the draft's new revision,\nthe layers changed, what each operation did and the operations that undo the batch —\nand, once saved, ``editor_url``: the editor with the changed layers chosen.","operationId":"operate_on_draft_companies__company_id__templates__template_id__draft_operations_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Operate On Draft Companies  Company Id  Templates  Template Id  Draft Operations Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/publish":{"post":{"tags":["creatives"],"summary":"Publish","description":"The draft becomes the next version: the one renders and feeds use.\n\nRefused (409 ``published-since``) when another version was published\nafter the draft started, until ``force``; (409 ``draft-changed``) when the\ndraft was saved again after the revision the editor publishes; and (409\n``nothing-to-publish``) without a draft. A template that makes its\ncreatives automatically makes them again for the new version.","operationId":"publish_companies__company_id__templates__template_id__publish_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePublishRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateVersionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/versions/{version_id}/publish":{"post":{"tags":["creatives"],"summary":"Publish Version","description":"Make an earlier version the published one again. A draft stays as it is.","operationId":"publish_version_companies__company_id__templates__template_id__versions__version_id__publish_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/presence":{"post":{"tags":["creatives"],"summary":"Presence","description":"The editor's heartbeat: \"I am here\". Answers who else is, and the draft as saved.\n\nEvery few seconds while a template is open, so the editor can say who else\nis editing and notice a draft saved or a version published elsewhere.","operationId":"presence_companies__company_id__templates__template_id__presence_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePresenceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/usage":{"get":{"tags":["creatives"],"summary":"Usage","description":"What publishing reaches: the feeds that send this template's creatives, and how many.","operationId":"usage_companies__company_id__templates__template_id__usage_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateUsageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/starter-preview":{"post":{"tags":["creatives"],"summary":"Preview Starter","description":"A starter rendered against a real product, before any template exists.\n\nThe chooser shows what each starting point actually looks like for these\nproducts, which a name and an abstract sketch cannot.","operationId":"preview_starter_companies__company_id__templates_starter_preview_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"theme","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"none, scheduled (the default: the company's theme now) or a theme's id","title":"Theme"},"description":"none, scheduled (the default: the company's theme now) or a theme's id"},{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"draw as at this moment, with a time zone; now when left out","title":"At"},"description":"draw as at this moment, with a time zone; now when left out"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StarterPreviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePreviewOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/preview":{"post":{"tags":["creatives"],"summary":"Preview","description":"Server-side SVG for one product: the parity reference for the editor's own render.\n\nWith ``profile`` \"clean\", the document's clean image instead (decision 124):\ndrawn from ``clean_document`` exactly as a render draws it, in any of the\nthree formats, with no variant and no rule set. With \"lifestyle\", its\nlifestyle image (decision 128), in 1:1 or 4:5; ``variant`` then names which\nof them (decision 138): ``default`` for the first, 2 to 5 after it.","operationId":"preview_companies__company_id__templates__template_id__preview_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"draw as at this moment, with a time zone; now when left out","title":"At"},"description":"draw as at this moment, with a time zone; now when left out"},{"name":"theme","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"none, scheduled (the default: the company's theme now) or a theme's id","title":"Theme"},"description":"none, scheduled (the default: the company's theme now) or a theme's id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePreviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePreviewOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/touchups":{"get":{"tags":["creatives"],"summary":"List Touchups","description":"The template's per-product touch-ups (decision 164), the latest first; or one product's.","operationId":"list_touchups_companies__company_id__templates__template_id__touchups_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"product_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TouchupOut"},"title":"Response List Touchups Companies  Company Id  Templates  Template Id  Touchups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["creatives"],"summary":"Save Touchup","description":"Set one product's touch-up of one picture in one format; setting nothing removes it.\n\nIt is laid over the layer as written for that product alone, in renders,\npreviews and checks, and kept across publishes. An auto-render template is\nasked for a run, which draws that product again and no other.","operationId":"save_touchup_companies__company_id__templates__template_id__touchups_put","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TouchupSave"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TouchupOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/sheet":{"post":{"tags":["creatives"],"summary":"Template Sheet","description":"The draft — or a document — drawn for a few products in its formats, on one PNG\n(decision 195): each cell as a render draws it, at the size the sheet gives it.\n\nJSON by default: ``{image, media_type, width, height, cells, of}``, the image base64\nand each cell where it is, its product, format and warnings, and — drawn from the\ntemplate's own draft or version — ``editor_url``, the editor on that product in that\nformat; ``Accept: image/png``\nanswers the PNG itself. Drawn by the render worker, which the API waits for (503\n``sheet-busy`` when it cannot in time).","operationId":"template_sheet_companies__company_id__templates__template_id__sheet_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"draw as at this moment, with a time zone; now when left out","title":"At"},"description":"draw as at this moment, with a time zone; now when left out"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateSheetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/previews":{"post":{"tags":["creatives"],"summary":"Previews","description":"The draft drawn for several products at once (decision 165): the editor's grid.\n\nEach as the preview draws one, with its touch-ups, in one format, and how\nmany problems the checks find with it, so the grid can say which need a\nlook. In the order asked; a product that does not exist is left out.","operationId":"previews_companies__company_id__templates__template_id__previews_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"draw as at this moment, with a time zone; now when left out","title":"At"},"description":"draw as at this moment, with a time zone; now when left out"},{"name":"theme","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"none, scheduled (the default: the company's theme now) or a theme's id","title":"Theme"},"description":"none, scheduled (the default: the company's theme now) or a theme's id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePreviewsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePreviewsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/checks":{"post":{"tags":["creatives"],"summary":"Check Page","description":"One page of the product checks: what a render of the draft would get wrong.\n\nEach product is resolved in each format as a render resolves it, and read\nby ``core/creatives/qa.py``: text cut off, too tall or shrunk to its\nminimum, connected text that came out empty, missing and upscaled\npictures, text and logos in a safe zone, and the font and binding\nwarnings. Nothing is drawn and nothing is stored; the editor walks the\nproducts (or one product set's) with ``next_cursor``.","operationId":"check_page_companies__company_id__templates__template_id__checks_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"theme","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"none, scheduled (the default: the company's theme now) or a theme's id","title":"Theme"},"description":"none, scheduled (the default: the company's theme now) or a theme's id"},{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"draw as at this moment, with a time zone; now when left out","title":"At"},"description":"draw as at this moment, with a time zone; now when left out"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateCheckPageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/render-runs":{"post":{"tags":["creatives"],"summary":"Start Batch","operationId":"start_batch_companies__company_id__templates__template_id__render_runs_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderRunRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderRunOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["creatives"],"summary":"List Runs","operationId":"list_runs_companies__company_id__templates__template_id__render_runs_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RenderRunOut"},"title":"Response List Runs Companies  Company Id  Templates  Template Id  Render Runs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/templates/{template_id}/renders":{"post":{"tags":["creatives"],"summary":"Render One","description":"Queue one raster render (a product-level preview) on the worker.\n\nA creative a Meta channel sends is drawn as the runs draw it: a JPEG at\ntwice its format's size, whatever ``output`` says (decision 270).","operationId":"render_one_companies__company_id__templates__template_id__renders_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"product_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"1:1","title":"Format"}},{"name":"output","in":"query","required":false,"schema":{"type":"string","default":"png","title":"Output"}},{"name":"variant","in":"query","required":false,"schema":{"type":"string","default":"default","title":"Variant"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Render One Companies  Company Id  Templates  Template Id  Renders Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/renders":{"get":{"tags":["creatives"],"summary":"List Renders","operationId":"list_renders_companies__company_id__renders_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"product_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"}},{"name":"template_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Template Id"}},{"name":"variant","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RenderOut"},"title":"Response List Renders Companies  Company Id  Renders Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["creatives"],"summary":"Delete Renders Route","description":"Delete a group of renders — the same filters ``GET …/renders`` takes.\n\nAt least one filter is required. A bare ``DELETE …/renders`` would mean\n\"every creative there is\", which is not something anyone should be\nable to ask for by forgetting a query string.\n\nDeleting a render is not destroying anything irreplaceable: a render is a\npure function of its template version, the product and its assets, so the\nnext run — or the next \"Render this product\" — makes it again. See\n``services.creatives.delete_renders`` for why the file goes after the row.","operationId":"delete_renders_route_companies__company_id__renders_delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"product_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"}},{"name":"template_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Template Id"}},{"name":"variant","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderDeleteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/renders/{render_id}":{"delete":{"tags":["creatives"],"summary":"Delete Render","description":"Delete one render: the row and, unless another row shares it, its file.","operationId":"delete_render_companies__company_id__renders__render_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"render_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Render Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/renders/{render_id}/file":{"get":{"tags":["creatives"],"summary":"Render File","operationId":"render_file_companies__company_id__renders__render_id__file_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"render_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Render Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/company-assets":{"get":{"tags":["creatives"],"summary":"List Company Assets","description":"Every company-level image: the brand slots and the picture library alike.\n\nOne list, because they are one table and the editor's picker wants both —\nthe `kind` says which is which (`img_<name>` is a library picture).","operationId":"list_company_assets_companies__company_id__company_assets_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CompanyAssetOut"},"title":"Response List Company Assets Companies  Company Id  Company Assets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/company-assets/logo":{"post":{"tags":["creatives"],"summary":"Upload Logo","description":"The light-ground logo. Kept as its own operation because the portal and\nthe e2e suite were written against it before ``{kind}`` existed.","operationId":"upload_logo_companies__company_id__company_assets_logo_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_logo_companies__company_id__company_assets_logo_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyAssetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/company-assets/{kind}":{"post":{"tags":["creatives"],"summary":"Upload Company Asset","description":"A brand slot or a library picture.\n\n``logo`` and ``logo_dark`` are the two brand slots. Anything else must be\n``img_<name>`` with ``<name>`` matching ``^[a-z0-9][a-z0-9_-]{0,39}$`` — a\npicture in the company's library, bindable as ``company.images.<name>``.\nUploading a name that already exists replaces it, exactly as re-uploading\na logo does.","operationId":"upload_company_asset_companies__company_id__company_assets__kind__post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_company_asset_companies__company_id__company_assets__kind__post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyAssetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["creatives"],"summary":"Remove Company Asset","description":"Remove one library picture.\n\nThe brand slots are refused: ``logo`` and ``logo_dark`` are slots, not\nentries — a template binds to them by name, so the way to change one is to\nupload over it, and \"delete\" would leave every starter's mark empty with no\nway back through this API.\n\nTemplates already bound to the picture are left alone on purpose. The\nbinding resolves to nothing, the layer hides with an ``image_missing``\nwarning, and the preview says so — which is visible and fixable, unlike a\nscan that rewrote documents on the author's behalf.","operationId":"remove_company_asset_companies__company_id__company_assets__kind__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/company-assets/{kind}/file":{"get":{"tags":["creatives"],"summary":"Company Asset File","operationId":"company_asset_file_companies__company_id__company_assets__kind__file_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/brand-kit":{"get":{"tags":["creatives"],"summary":"Get Brand Kit","description":"The company's colours, typefaces, sale wording, spacing, corners and text styles.\n\nNever 404s: a company that has never saved one gets the defaults with\n``configured: false``.","operationId":"get_brand_kit_companies__company_id__brand_kit_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandKitOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["creatives"],"summary":"Put Brand Kit","description":"Merge a partial kit into the stored one, so the portal can save one field.\n\nThe website (decision 246) is kept beside the kit: it is no render input,\nso a save of it alone asks no template for a run.","operationId":"put_brand_kit_companies__company_id__brand_kit_put","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandKitUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandKitOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/brand-kit/website":{"get":{"tags":["creatives"],"summary":"Get Brand Website","description":"What Zalia read on the brand's website (decision 246), for a model designing a\ntemplate: kept for a week, read again when it is older or with ``refresh``. A site\nthat cannot be read answers its reason in ``look.error``; no website, nulls.","operationId":"get_brand_website_companies__company_id__brand_kit_website_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Refresh"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebsiteLookOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/themes":{"get":{"tags":["creatives"],"summary":"List Themes","description":"Every theme, by name, with what it changes and how many windows switch it on.","operationId":"list_themes_companies__company_id__themes_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ThemeOut"},"title":"Response List Themes Companies  Company Id  Themes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["creatives"],"summary":"Create Theme","description":"A new theme changing what it is given, nothing else; not switched on yet.","operationId":"create_theme_companies__company_id__themes_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemeCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemeOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/themes/{theme_id}":{"get":{"tags":["creatives"],"summary":"Get Theme","operationId":"get_theme_companies__company_id__themes__theme_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Theme Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemeOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["creatives"],"summary":"Update Theme","description":"A new name, or sections — each replacing the theme's own. If the company\ndraws with it now, its automatic templates are asked for a run.","operationId":"update_theme_companies__company_id__themes__theme_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Theme Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemeOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["creatives"],"summary":"Delete Theme","description":"The theme and every window for it; what drew with it draws without it.","operationId":"delete_theme_companies__company_id__themes__theme_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"theme_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Theme Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/theme-windows":{"get":{"tags":["creatives"],"summary":"List Windows","description":"The windows, the first to start first, and the theme the company draws with now.","operationId":"list_windows_companies__company_id__theme_windows_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemeWindowsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["creatives"],"summary":"Add Window","description":"A window in which the company draws with a theme. Refused when it ends\nbefore it starts, or shares a moment with another window.","operationId":"add_window_companies__company_id__theme_windows_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemeWindowCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemeWindowOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/theme-windows/{window_id}":{"delete":{"tags":["creatives"],"summary":"Remove Window","description":"A window taken off; the company draws as the other windows say.","operationId":"remove_window_companies__company_id__theme_windows__window_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"window_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Window Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/calendar":{"get":{"tags":["creatives"],"summary":"List Periods","description":"Every period of the calendar, the first to start first.","operationId":"list_periods_companies__company_id__calendar_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CampaignPeriodOut"},"title":"Response List Periods Companies  Company Id  Calendar Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["creatives"],"summary":"Create Period","operationId":"create_period_companies__company_id__calendar_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignPeriodCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignPeriodOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/calendar/{period_id}":{"patch":{"tags":["creatives"],"summary":"Update Period","operationId":"update_period_companies__company_id__calendar__period_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"period_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Period Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignPeriodUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignPeriodOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["creatives"],"summary":"Delete Period","operationId":"delete_period_companies__company_id__calendar__period_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"period_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Period Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/activity":{"get":{"tags":["activity"],"summary":"Read Activity","description":"Imports, exports, renders and image jobs of the company, newest first.\n\n``running`` and ``paused`` count every run under way, not those on the page\n(decision 210): the top bar asks for one item, and said \"1 running\" with\nfive going. One run at a time per subject (decision 207) keeps them few.\nThey count every kind whatever ``kind`` asks for (decision 221), which\nnarrows the list only.","operationId":"read_activity_companies__company_id__activity_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"only_active","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Only Active"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Only these kinds of run, a comma list of import, export, render and images; the newest `limit` of them. Every kind when left out.","title":"Kind"},"description":"Only these kinds of run, a comma list of import, export, render and images; the newest `limit` of them. Every kind when left out."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityPageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/activity/trends":{"get":{"tags":["activity"],"summary":"Read Activity Trends","description":"The last ``days`` days of finished work, a number per day for each kind.\n\nWhat the Overview draws its stage cards' trend lines from (design 16.0):\nrows imported, products sent, creatives rendered, pictures done.","operationId":"read_activity_trends_companies__company_id__activity_trends_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityTrendsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/activity/{kind}/{run_id}":{"get":{"tags":["activity"],"summary":"Read Run","description":"One run: its row, its log oldest line first, its counts, and its first problems.","operationId":"read_run_companies__company_id__activity__kind___run_id__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"enum":["import","export","render","images"],"type":"string","title":"Kind"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityDetailOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/activity/{kind}/{run_id}/{action}":{"post":{"tags":["activity"],"summary":"Control Run","description":"Pause, continue, stop, or run again.\n\nAnswers with the run as it is now — for ``rerun``, with the new run. A\nrequest the run is not in a state for is a 409 whose detail says why, in\nwords for the person who asked.","operationId":"control_run_companies__company_id__activity__kind___run_id___action__post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"kind","in":"path","required":true,"schema":{"enum":["import","export","render","images"],"type":"string","title":"Kind"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"action","in":"path","required":true,"schema":{"enum":["pause","resume","cancel","rerun"],"type":"string","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fonts/catalogue":{"get":{"tags":["fonts"],"summary":"Font Catalogue","description":"Every free family the editor can offer, plus the names of the installed six.\n\nServed whole: it is fetched once per session and filtered in the browser,\nand it changes only when the catalogue file is regenerated, which is what\nthe ETag tracks.","operationId":"font_catalogue_fonts_catalogue_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/fonts/faces/{content_hash}":{"get":{"tags":["fonts"],"summary":"Catalogue Face File","description":"One stored catalogue face — the same bytes the worker renders with.","operationId":"catalogue_face_file_fonts_faces__content_hash__get","parameters":[{"name":"content_hash","in":"path","required":true,"schema":{"type":"string","title":"Content Hash"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fonts/previews/{family_id}":{"get":{"tags":["fonts"],"summary":"Font Preview","description":"A small WOFF2 to draw one picker row in its own family.\n\nOnly for the list: a row needs a few dozen Latin letters, not a complete\nface. It is fetched once, kept in storage, and served from here, so\nscrolling the picker never sends a browser to a font CDN either.","operationId":"font_preview_fonts_previews__family_id__get","parameters":[{"name":"family_id","in":"path","required":true,"schema":{"type":"string","title":"Family Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/fonts/resolve":{"post":{"tags":["fonts"],"summary":"Resolve Fonts","description":"Which face each request draws with, for this company.\n\nThe editor's share of the one decision the preview and the worker also\ntake, through the same function — so the three can never disagree about\nthe nearest weight, an upload shadowing a catalogue family, or a face that\nhas not been fetched yet. A face used for the first time is fetched now.\n``advances`` are the tables a template on text engine 2 measures by, for\ninstalled families too: the editor has no font file to read them from.","operationId":"resolve_fonts_companies__company_id__fonts_resolve_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FontResolveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FontResolveOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/fonts":{"get":{"tags":["fonts"],"summary":"List Fonts","description":"Every uploaded face, grouped by family in name order.","operationId":"list_fonts_companies__company_id__fonts_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CompanyFontOut"},"title":"Response List Fonts Companies  Company Id  Fonts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["fonts"],"summary":"Upload Font","description":"One TrueType (.ttf) or OpenType (.otf) face.\n\nThe family, weight and style are read from the file, because they are what\nthe renderer matches. Uploading a face that already exists replaces it.\nWOFF and WOFF2 are refused: the renderer cannot read them.","operationId":"upload_font_companies__company_id__fonts_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_font_companies__company_id__fonts_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyFontOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/fonts/{font_id}":{"delete":{"tags":["fonts"],"summary":"Remove Font","description":"Remove one uploaded face.\n\nTemplates that used it are left alone, as with a deleted picture: the text\nrenders in the catalogue family of that name if there is one, and\notherwise in the fallback with a ``font_unavailable`` warning.","operationId":"remove_font_companies__company_id__fonts__font_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"font_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Font Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/fonts/{font_id}/file":{"get":{"tags":["fonts"],"summary":"Company Font File","operationId":"company_font_file_companies__company_id__fonts__font_id__file_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"font_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Font Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/elements":{"get":{"tags":["elements"],"summary":"List Elements","description":"Every element of the library, by name, each with its newest version.","operationId":"list_elements_companies__company_id__elements_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LibraryElementOut"},"title":"Response List Elements Companies  Company Id  Elements Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["elements"],"summary":"Create Element","description":"A new library element, its first version the definition given.","operationId":"create_element_companies__company_id__elements_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryElementCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryElementOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/elements/preview":{"post":{"tags":["elements"],"summary":"Preview Element","description":"An element drawn alone for one product, as the editor previews a design (decision\n249): the server's SVG and what it read, for an element edited outside any template —\nits definition shown alone, or the element as the editor edits it, a document of its\nown.","operationId":"preview_element_companies__company_id__elements_preview_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"theme","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"none, scheduled (the default: the company's theme now) or a theme's id","title":"Theme"},"description":"none, scheduled (the default: the company's theme now) or a theme's id"},{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"draw as at this moment, with a time zone; now when left out","title":"At"},"description":"draw as at this moment, with a time zone; now when left out"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElementPreviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePreviewOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/elements/sheet":{"post":{"tags":["elements"],"summary":"Element Sheet","description":"An element drawn alone for a few products on one PNG (decision 249), as a template's\nsheet is: JSON ``{image, media_type, width, height, cells, of}`` by default, the PNG\nitself for ``Accept: image/png``.","operationId":"element_sheet_companies__company_id__elements_sheet_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElementSheetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/elements/{element_id}/versions":{"get":{"tags":["elements"],"summary":"List Versions","description":"A library element's versions, newest first.","operationId":"list_versions_companies__company_id__elements__element_id__versions_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"element_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Element Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LibraryElementVersionOut"},"title":"Response List Versions Companies  Company Id  Elements  Element Id  Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["elements"],"summary":"Publish Version","description":"The definition as the element's next version; 200 with the newest when it is unchanged.","operationId":"publish_version_companies__company_id__elements__element_id__versions_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"element_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Element Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryElementPublish"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryElementPublished"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/elements/{element_id}/versions/{version}":{"get":{"tags":["elements"],"summary":"Get Version","operationId":"get_version_companies__company_id__elements__element_id__versions__version__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"element_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Element Id"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryElementVersionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/elements/{element_id}":{"patch":{"tags":["elements"],"summary":"Rename Element","description":"A new name for the library element; its versions keep theirs.","operationId":"rename_element_companies__company_id__elements__element_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"element_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Element Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryElementUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LibraryElementOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["elements"],"summary":"Delete Element","description":"The element and its versions out of the library; every template keeps its own copy.","operationId":"delete_element_companies__company_id__elements__element_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"element_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Element Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/builtin-elements":{"get":{"tags":["elements"],"summary":"List Builtin Elements","description":"Every built-in element, by group, as this company would take it.","operationId":"list_builtin_elements_companies__company_id__builtin_elements_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuiltinElementsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/builtin-elements/previews":{"post":{"tags":["elements"],"summary":"Preview Builtin Elements","description":"The built-ins drawn for a product — the one asked for, else the first —\nand those it has nothing for, on an example of it.","operationId":"preview_builtin_elements_companies__company_id__builtin_elements_previews_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"theme","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"none, scheduled (the default: the company's theme now) or a theme's id","title":"Theme"},"description":"none, scheduled (the default: the company's theme now) or a theme's id"},{"name":"at","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"draw as at this moment, with a time zone; now when left out","title":"At"},"description":"draw as at this moment, with a time zone; now when left out"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuiltinPreviewsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuiltinPreviewsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/experiments":{"get":{"tags":["experiments"],"summary":"List Experiments","operationId":"list_experiments_companies__company_id__experiments_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentOut"},"title":"Response List Experiments Companies  Company Id  Experiments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["experiments"],"summary":"Create","operationId":"create_companies__company_id__experiments_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/experiments/{experiment_id}":{"get":{"tags":["experiments"],"summary":"Get Experiment","operationId":"get_experiment_companies__company_id__experiments__experiment_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Experiment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["experiments"],"summary":"Update","description":"Rename, or move between draft → running → completed.\n\nStarting an experiment queues a render run for its variants so the\nsupplementary feed has every arm's creative before it publishes.","operationId":"update_companies__company_id__experiments__experiment_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Experiment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["experiments"],"summary":"Delete","description":"Delete an experiment that is not running and that no channel publishes.\n\nIts metrics cascade. The template, its variants and their creatives stay:\nthey are the template's, and another experiment may test them.","operationId":"delete_companies__company_id__experiments__experiment_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Experiment Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/experiments/{experiment_id}/metrics":{"post":{"tags":["experiments"],"summary":"Upload Metrics","description":"Upload the channel's per-product, per-variant daily report as CSV.\n\nA plain function (decision 206): reading and upserting a large report on\nthe event loop held up every other request while it ran.","operationId":"upload_metrics_companies__company_id__experiments__experiment_id__metrics_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Experiment Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_metrics_companies__company_id__experiments__experiment_id__metrics_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricsImportOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/experiments/{experiment_id}/summary":{"get":{"tags":["experiments"],"summary":"Get Summary","operationId":"get_summary_companies__company_id__experiments__experiment_id__summary_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"},{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Experiment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Summary Companies  Company Id  Experiments  Experiment Id  Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/channels":{"get":{"tags":["channels"],"summary":"List Connections","operationId":"list_connections_companies__company_id__channels_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChannelConnectionOut"},"title":"Response List Connections Companies  Company Id  Channels Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/channels/meta/catalogs":{"get":{"tags":["channels"],"summary":"Meta Catalogs","operationId":"meta_catalogs_companies__company_id__channels_meta_catalogs_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChannelCatalogOut"},"title":"Response Meta Catalogs Companies  Company Id  Channels Meta Catalogs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/{company_id}/channels/meta/catalog":{"post":{"tags":["channels"],"summary":"Meta Choose Catalog","operationId":"meta_choose_catalog_companies__company_id__channels_meta_catalog_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Company id","title":"Company Id"},"description":"Company id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChooseChannelCatalog"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelConnectionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ActivityActionsOut":{"properties":{"pause":{"type":"boolean","title":"Pause"},"resume":{"type":"boolean","title":"Resume"},"cancel":{"type":"boolean","title":"Cancel"},"rerun":{"type":"boolean","title":"Rerun"},"notice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notice"}},"type":"object","required":["pause","resume","cancel","rerun"],"title":"ActivityActionsOut","description":"What a person may ask of the run right now."},"ActivityDetailOut":{"properties":{"item":{"$ref":"#/components/schemas/ActivityOut"},"events":{"items":{"$ref":"#/components/schemas/RunEventOut"},"type":"array","title":"Events"},"facts":{"items":{"$ref":"#/components/schemas/ActivityFactOut"},"type":"array","title":"Facts"},"error_count":{"type":"integer","title":"Error Count"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"}},"type":"object","required":["item","events","facts","error_count","errors"],"title":"ActivityDetailOut","description":"A run with its log (oldest line first), its counts, and the first few problems."},"ActivityFactOut":{"properties":{"label":{"type":"string","title":"Label"},"value":{"type":"string","title":"Value"}},"type":"object","required":["label","value"],"title":"ActivityFactOut"},"ActivityOut":{"properties":{"kind":{"type":"string","title":"Kind"},"id":{"type":"string","format":"uuid","title":"Id"},"status":{"type":"string","title":"Status"},"subject_id":{"type":"string","format":"uuid","title":"Subject Id"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"trigger":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trigger"},"done":{"type":"integer","title":"Done"},"total":{"type":"integer","title":"Total"},"failed":{"type":"integer","title":"Failed"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"is_running":{"type":"boolean","title":"Is Running"},"is_paused":{"type":"boolean","title":"Is Paused"},"control":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Control"},"progress":{"$ref":"#/components/schemas/ActivityProgressOut"},"actions":{"$ref":"#/components/schemas/ActivityActionsOut"}},"type":"object","required":["kind","id","status","subject_id","subject","trigger","done","total","failed","error_message","job_id","started_at","finished_at","created_at","updated_at","is_running","is_paused","control","progress","actions"],"title":"ActivityOut","description":"One run of any kind, in the terms they share."},"ActivityPageOut":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ActivityOut"},"type":"array","title":"Items"},"running":{"type":"integer","title":"Running"},"paused":{"type":"integer","title":"Paused"},"queues":{"additionalProperties":{"type":"integer"},"type":"object","title":"Queues"}},"type":"object","required":["items","running","paused","queues"],"title":"ActivityPageOut","description":"The company's runs, plus what is still waiting in the broker."},"ActivityProgressOut":{"properties":{"step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Step"},"done":{"type":"integer","title":"Done"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"},"unit":{"type":"string","title":"Unit"},"rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rows"},"batch":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Batch"},"batches":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Batches"}},"type":"object","required":["step","done","total","unit"],"title":"ActivityProgressOut","description":"How far a run has got, in the terms of the step it is on."},"ActivityTrendsOut":{"properties":{"days":{"items":{"type":"string","format":"date"},"type":"array","title":"Days"},"imports":{"items":{"type":"integer"},"type":"array","title":"Imports"},"rows_imported":{"items":{"type":"integer"},"type":"array","title":"Rows Imported"},"exports":{"items":{"type":"integer"},"type":"array","title":"Exports"},"products_sent":{"items":{"type":"integer"},"type":"array","title":"Products Sent"},"creatives":{"items":{"type":"integer"},"type":"array","title":"Creatives"},"images":{"items":{"type":"integer"},"type":"array","title":"Images"}},"type":"object","required":["days","imports","rows_imported","exports","products_sent","creatives","images"],"title":"ActivityTrendsOut","description":"Daily totals of the company's finished work, oldest day first (design 16.0).\n\nEvery list has one number per entry in ``days`` (UTC calendar days, by\nwhen a run finished): published imports and the rows they read, published\nexports and the products they wrote, creatives rendered, pictures done."},"AdminCompanyCounts":{"properties":{"total":{"type":"integer","title":"Total"},"active":{"type":"integer","title":"Active"},"setting_up":{"type":"integer","title":"Setting Up"},"failed":{"type":"integer","title":"Failed"},"new_30d":{"type":"integer","title":"New 30D"}},"type":"object","required":["total","active","setting_up","failed","new_30d"],"title":"AdminCompanyCounts"},"AdminCompanyCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"slug":{"type":"string","maxLength":50,"minLength":2,"pattern":"^[a-z0-9][a-z0-9-]*[a-z0-9]$","title":"Slug"},"owner_email":{"type":"string","maxLength":320,"minLength":3,"pattern":"^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$","title":"Owner Email"},"owner_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Owner Name"},"add_me":{"type":"boolean","title":"Add Me","default":false}},"type":"object","required":["name","slug","owner_email"],"title":"AdminCompanyCreate"},"AdminCompanyCreatedOut":{"properties":{"company":{"$ref":"#/components/schemas/AdminCompanyOut"},"owner_email":{"type":"string","title":"Owner Email"},"temporary_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temporary Password"},"queued":{"type":"boolean","title":"Queued"}},"type":"object","required":["company","owner_email","queued"],"title":"AdminCompanyCreatedOut"},"AdminCompanyOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"status":{"type":"string","title":"Status"},"status_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Reason"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"people":{"type":"integer","title":"People"},"owners":{"items":{"type":"string"},"type":"array","title":"Owners"},"last_sign_in_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sign In At"},"usage":{"anyOf":[{"$ref":"#/components/schemas/AdminUsageOut"},{"type":"null"}]}},"type":"object","required":["id","name","slug","status","created_at","people","owners"],"title":"AdminCompanyOut"},"AdminOverviewOut":{"properties":{"companies":{"$ref":"#/components/schemas/AdminCompanyCounts"},"people":{"$ref":"#/components/schemas/AdminPeopleCounts"},"totals":{"$ref":"#/components/schemas/AdminTotals"},"products_30d_ago":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Products 30D Ago"},"measured_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Measured From"},"measured_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Measured To"},"queues":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Queues"}},"type":"object","required":["companies","people","totals"],"title":"AdminOverviewOut"},"AdminPasswordResetOut":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"email":{"type":"string","title":"Email"},"temporary_password":{"type":"string","title":"Temporary Password"},"sessions_signed_out":{"type":"integer","title":"Sessions Signed Out"}},"type":"object","required":["user_id","email","temporary_password","sessions_signed_out"],"title":"AdminPasswordResetOut"},"AdminPeopleCounts":{"properties":{"total":{"type":"integer","title":"Total"},"signed_in_7d":{"type":"integer","title":"Signed In 7D"},"signed_in_30d":{"type":"integer","title":"Signed In 30D"}},"type":"object","required":["total","signed_in_7d","signed_in_30d"],"title":"AdminPeopleCounts"},"AdminPersonCompanyOut":{"properties":{"company_id":{"type":"string","format":"uuid","title":"Company Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"role":{"type":"string","title":"Role"},"pending":{"type":"boolean","title":"Pending"}},"type":"object","required":["company_id","name","slug","role","pending"],"title":"AdminPersonCompanyOut"},"AdminPersonOut":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"email":{"type":"string","title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"is_active":{"type":"boolean","title":"Is Active"},"platform_admin":{"type":"boolean","title":"Platform Admin"},"must_change_password":{"type":"boolean","title":"Must Change Password"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"sessions":{"type":"integer","title":"Sessions"},"companies":{"items":{"$ref":"#/components/schemas/AdminPersonCompanyOut"},"type":"array","title":"Companies"}},"type":"object","required":["user_id","email","is_active","platform_admin","must_change_password","created_at","sessions","companies"],"title":"AdminPersonOut","description":"One account on the platform, for its admins (decision 234)."},"AdminQueuedOut":{"properties":{"queued":{"type":"boolean","title":"Queued"}},"type":"object","required":["queued"],"title":"AdminQueuedOut"},"AdminTotals":{"properties":{"products":{"type":"integer","title":"Products"},"sources":{"type":"integer","title":"Sources"},"output_feeds":{"type":"integer","title":"Output Feeds"},"templates":{"type":"integer","title":"Templates"},"pictures":{"type":"integer","title":"Pictures"},"cutouts":{"type":"integer","title":"Cutouts"},"renders":{"type":"integer","title":"Renders"},"storage_bytes":{"type":"integer","title":"Storage Bytes"},"imports_30d":{"type":"integer","title":"Imports 30D"},"failed_imports_30d":{"type":"integer","title":"Failed Imports 30D"},"cutouts_30d":{"type":"integer","title":"Cutouts 30D"},"renders_30d":{"type":"integer","title":"Renders 30D"}},"type":"object","required":["products","sources","output_feeds","templates","pictures","cutouts","renders","storage_bytes","imports_30d","failed_imports_30d","cutouts_30d","renders_30d"],"title":"AdminTotals"},"AdminUsageOut":{"properties":{"measured_at":{"type":"string","format":"date-time","title":"Measured At"},"last_import_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Import At"},"products":{"type":"integer","title":"Products"},"sources":{"type":"integer","title":"Sources"},"output_feeds":{"type":"integer","title":"Output Feeds"},"templates":{"type":"integer","title":"Templates"},"pictures":{"type":"integer","title":"Pictures"},"cutouts":{"type":"integer","title":"Cutouts"},"renders":{"type":"integer","title":"Renders"},"storage_bytes":{"type":"integer","title":"Storage Bytes"},"imports_30d":{"type":"integer","title":"Imports 30D"},"failed_imports_30d":{"type":"integer","title":"Failed Imports 30D"},"cutouts_30d":{"type":"integer","title":"Cutouts 30D"},"renders_30d":{"type":"integer","title":"Renders 30D"}},"type":"object","required":["measured_at","products","sources","output_feeds","templates","pictures","cutouts","renders","storage_bytes","imports_30d","failed_imports_30d","cutouts_30d","renders_30d"],"title":"AdminUsageOut","description":"A company's newest numbers, counted in its own database."},"AdvanceTableOut":{"properties":{"average":{"type":"integer","title":"Average"},"blocks":{"items":{"items":{"anyOf":[{"type":"integer"},{"items":{"type":"integer"},"type":"array"}]},"type":"array"},"type":"array","title":"Blocks"},"kerning":{"anyOf":[{"$ref":"#/components/schemas/KerningOut"},{"type":"null"}]}},"type":"object","required":["average","blocks"],"title":"AdvanceTableOut","description":"One font file's advances, in thousandths of an em (decision 149).\n\nEach block is ``[start, [w, w, …]]`` for consecutive code points or\n``[start, end, w]`` for a stretch with one advance; ``average`` is what a\ncharacter the file does not have takes; ``kerning`` is there when it kerns."},"ApiKeyCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"scopes":{"items":{"$ref":"#/components/schemas/ApiKeyScope"},"type":"array","title":"Scopes"}},"type":"object","required":["name"],"title":"ApiKeyCreate"},"ApiKeyCreatedOut":{"properties":{"key":{"$ref":"#/components/schemas/ApiKeyOut"},"secret":{"type":"string","title":"Secret"}},"type":"object","required":["key","secret"],"title":"ApiKeyCreatedOut"},"ApiKeyOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"scopes":{"items":{},"type":"array","title":"Scopes"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"lapsed":{"type":"boolean","title":"Lapsed","default":false}},"type":"object","required":["id","name","prefix","scopes","created_by","last_used_at","revoked_at","created_at"],"title":"ApiKeyOut"},"ApiKeyScope":{"type":"string","enum":["read","write"],"title":"ApiKeyScope"},"AssetDerivativeOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"asset_id":{"type":"string","format":"uuid","title":"Asset Id"},"kind":{"type":"string","title":"Kind"},"processor":{"type":"string","title":"Processor"},"processor_version":{"type":"string","title":"Processor Version"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"byte_size":{"type":"integer","title":"Byte Size"},"quality":{"additionalProperties":true,"type":"object","title":"Quality"},"review_status":{"type":"string","title":"Review Status"},"review_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review Note"},"reviewed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Reviewed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","asset_id","kind","processor","processor_version","model","width","height","byte_size","quality","review_status","review_note","reviewed_at","created_at"],"title":"AssetDerivativeOut"},"AssetDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"content_hash":{"type":"string","title":"Content Hash"},"source_url":{"type":"string","title":"Source Url"},"status":{"type":"string","title":"Status"},"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"mime_type":{"type":"string","title":"Mime Type"},"byte_size":{"type":"integer","title":"Byte Size"},"attempt_count":{"type":"integer","title":"Attempt Count"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"current_cutout_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Current Cutout Id"},"processed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Processed At"},"checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Checked At"},"derivatives":{"items":{"$ref":"#/components/schemas/AssetDerivativeOut"},"type":"array","title":"Derivatives"},"references":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"References"},"kind":{"$ref":"#/components/schemas/PictureKind","default":"product"},"kind_source":{"anyOf":[{"$ref":"#/components/schemas/PictureKindSource"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"review_model":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Review Model"}},"type":"object","required":["id","content_hash","source_url","status","width","height","mime_type","byte_size","attempt_count","last_error","current_cutout_id","processed_at","checked_at","derivatives","references","created_at"],"title":"AssetDetail"},"AssetKindOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"kind":{"$ref":"#/components/schemas/PictureKind"},"kind_source":{"anyOf":[{"$ref":"#/components/schemas/PictureKindSource"},{"type":"null"}]},"status":{"type":"string","title":"Status"}},"type":"object","required":["id","kind","kind_source","status"],"title":"AssetKindOut"},"AssetKindUpdate":{"properties":{"kind":{"$ref":"#/components/schemas/PictureKind"}},"additionalProperties":false,"type":"object","required":["kind"],"title":"AssetKindUpdate","description":"A person sorts a picture (decision 203); sorting never changes it again."},"AssetListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"content_hash":{"type":"string","title":"Content Hash"},"status":{"type":"string","title":"Status"},"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"mime_type":{"type":"string","title":"Mime Type"},"byte_size":{"type":"integer","title":"Byte Size"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"current_cutout":{"anyOf":[{"$ref":"#/components/schemas/AssetDerivativeOut"},{"type":"null"}]},"references":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"References"},"checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Checked At"},"kind":{"$ref":"#/components/schemas/PictureKind","default":"product"},"kind_source":{"anyOf":[{"$ref":"#/components/schemas/PictureKindSource"},{"type":"null"}]},"kind_certainty":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kind Certainty"},"waiting":{"anyOf":[{"$ref":"#/components/schemas/AssetDerivativeOut"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","content_hash","status","width","height","mime_type","byte_size","last_error","current_cutout","references","checked_at","created_at"],"title":"AssetListItem"},"AssetStatus":{"type":"string","enum":["downloaded","normalized","processing","processed","failed"],"title":"AssetStatus"},"AuthorizeIn":{"properties":{"rerequest":{"type":"boolean","title":"Rerequest","default":false},"return_to":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Return To"}},"additionalProperties":false,"type":"object","title":"AuthorizeIn","description":"A sign-in to start: asking again for what is missing, and where the portal\nwants the browser back — ``/connectors``, ``/sources/new…`` or\n``/sources/{id}…`` (400 ``invalid-return-to`` for anything else)."},"BannerOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"shape":{"type":"string","title":"Shape"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"products":{"items":{"$ref":"#/components/schemas/BannerProductOut"},"type":"array","title":"Products"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview"},"preview_media_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Media Type"}},"type":"object","required":["id","image_url","width","height","shape","expires_at","products"],"title":"BannerOut"},"BannerProductOut":{"properties":{"product_id":{"type":"string","format":"uuid","title":"Product Id"},"title":{"type":"string","title":"Title"},"price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price"},"was":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Was"},"picture":{"anyOf":[{"type":"string","enum":["cutout","photo"]},{"type":"null"}],"title":"Picture"}},"type":"object","required":["product_id","title"],"title":"BannerProductOut"},"BannerRequest":{"properties":{"headline":{"type":"string","maxLength":80,"minLength":1,"title":"Headline"},"subline":{"anyOf":[{"type":"string","maxLength":140},{"type":"null"}],"title":"Subline"},"cta":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Cta"},"badge":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Badge"},"product_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":4,"title":"Product Ids"},"shape":{"type":"string","enum":["wide","square","portrait","story"],"title":"Shape","default":"wide"},"ground":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Ground"},"picture":{"anyOf":[{"type":"string","maxLength":24000000},{"type":"null"}],"title":"Picture"},"prices":{"type":"boolean","title":"Prices","default":true},"preview":{"type":"boolean","title":"Preview","default":false}},"type":"object","required":["headline"],"title":"BannerRequest","description":"A banner to draw (decision 238): its words, its products, its ground."},"Body_replace_companies__company_id__assets__asset_id__replace_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_replace_companies__company_id__assets__asset_id__replace_post"},"Body_upload_company_asset_companies__company_id__company_assets__kind__post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_company_asset_companies__company_id__company_assets__kind__post"},"Body_upload_font_companies__company_id__fonts_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_font_companies__company_id__fonts_post"},"Body_upload_logo_companies__company_id__company_assets_logo_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_logo_companies__company_id__company_assets_logo_post"},"Body_upload_metrics_companies__company_id__experiments__experiment_id__metrics_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_metrics_companies__company_id__experiments__experiment_id__metrics_post"},"Body_upload_source_file_companies__company_id__sources__source_id__upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_source_file_companies__company_id__sources__source_id__upload_post"},"BrandKitOut":{"properties":{"colors":{"additionalProperties":{"type":"string"},"type":"object","title":"Colors"},"fonts":{"additionalProperties":{"type":"string"},"type":"object","title":"Fonts"},"wording":{"additionalProperties":{"type":"string"},"type":"object","title":"Wording"},"spacing":{"additionalProperties":{"type":"integer"},"type":"object","title":"Spacing"},"radii":{"additionalProperties":{"type":"integer"},"type":"object","title":"Radii"},"styles":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Styles"},"configured":{"type":"boolean","title":"Configured"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"}},"type":"object","required":["colors","fonts","wording","spacing","radii","styles","configured","updated_at"],"title":"BrandKitOut","description":"A company's brand kit, always complete.\n\nA company that has never saved one gets the defaults with\n``configured: false``, so the portal needs no empty state in its data layer."},"BrandKitUpdate":{"properties":{"colors":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Colors"},"fonts":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Fonts"},"wording":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Wording"},"spacing":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Spacing"},"radii":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Radii"},"styles":{"anyOf":[{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object"},{"type":"null"}],"title":"Styles"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"}},"additionalProperties":false,"type":"object","title":"BrandKitUpdate","description":"A partial kit: every section given is merged into the stored one.\n\nThe values are checked in ``core/creatives/brand.py`` rather than here, so\nthe colour, typeface and wording rules have exactly one server-side home.\nA style is merged field by field, and its size format by format."},"BuiltinElementOut":{"properties":{"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"group":{"type":"string","title":"Group"},"description":{"type":"string","title":"Description"},"version":{"type":"integer","title":"Version"},"definition":{"additionalProperties":true,"type":"object","title":"Definition"},"reads":{"items":{"type":"string"},"type":"array","title":"Reads"},"missing":{"items":{"type":"string"},"type":"array","title":"Missing"},"use":{"additionalProperties":true,"type":"object","title":"Use"}},"type":"object","required":["key","name","group","description","version","definition","reads","missing","use"],"title":"BuiltinElementOut","description":"A built-in element (decision 176), written for the catalogue's market in the kit."},"BuiltinElementsOut":{"properties":{"groups":{"items":{"type":"string"},"type":"array","title":"Groups"},"items":{"items":{"$ref":"#/components/schemas/BuiltinElementOut"},"type":"array","title":"Items"}},"type":"object","required":["groups","items"],"title":"BuiltinElementsOut"},"BuiltinPreviewOut":{"properties":{"key":{"type":"string","title":"Key"},"svg":{"type":"string","title":"Svg"},"drawn":{"type":"boolean","title":"Drawn"},"example":{"type":"boolean","title":"Example","default":false}},"type":"object","required":["key","svg","drawn"],"title":"BuiltinPreviewOut"},"BuiltinPreviewsOut":{"properties":{"product_id":{"type":"string","format":"uuid","title":"Product Id"},"external_id":{"type":"string","title":"External Id"},"items":{"items":{"$ref":"#/components/schemas/BuiltinPreviewOut"},"type":"array","title":"Items"}},"type":"object","required":["product_id","external_id","items"],"title":"BuiltinPreviewsOut"},"BuiltinPreviewsRequest":{"properties":{"product_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"},"keys":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":40},{"type":"null"}],"title":"Keys"}},"type":"object","title":"BuiltinPreviewsRequest","description":"The built-ins drawn for a product (decision 176): the one asked for, else the first."},"CampaignPeriodCreate":{"properties":{"name":{"type":"string","maxLength":200,"title":"Name"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"ends_at":{"type":"string","format":"date-time","title":"Ends At"}},"additionalProperties":false,"type":"object","required":["name","starts_at","ends_at"],"title":"CampaignPeriodCreate","description":"A period of the campaign calendar (decision 188); its key is made from its name."},"CampaignPeriodOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"ends_at":{"type":"string","format":"date-time","title":"Ends At"},"state":{"type":"string","enum":["on","later","over"],"title":"State"},"templates":{"type":"integer","title":"Templates"}},"type":"object","required":["id","key","name","starts_at","ends_at","state","templates"],"title":"CampaignPeriodOut"},"CampaignPeriodUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Name"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"}},"additionalProperties":false,"type":"object","title":"CampaignPeriodUpdate","description":"A new name or moments; the key stays, so what reads the period still does."},"CatalogInfoOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"owner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Id"},"owner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Name"},"products":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Products"},"feeds":{"items":{"$ref":"#/components/schemas/FeedInfoOut"},"type":"array","title":"Feeds"},"settings":{"additionalProperties":true,"type":"object","title":"Settings"}},"type":"object","required":["id","name"],"title":"CatalogInfoOut","description":"A catalog the login can read, and the settings a source of it starts with."},"CatalogRefOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["id"],"title":"CatalogRefOut"},"CatalogsOut":{"properties":{"catalogs":{"items":{"$ref":"#/components/schemas/CatalogInfoOut"},"type":"array","title":"Catalogs"}},"type":"object","required":["catalogs"],"title":"CatalogsOut"},"CategoryCoverageOut":{"properties":{"values":{"type":"integer","title":"Values"},"values_mapped":{"type":"integer","title":"Values Mapped"},"products":{"type":"integer","title":"Products"},"products_mapped":{"type":"integer","title":"Products Mapped"},"products_uncategorised":{"type":"integer","title":"Products Uncategorised"}},"type":"object","required":["values","values_mapped","products","products_mapped","products_uncategorised"],"title":"CategoryCoverageOut","description":"How many of the products a channel would see a category for."},"CategoryListOut":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MerchantCategoryOut"},"type":"array","title":"Items"},"coverage":{"$ref":"#/components/schemas/CategoryCoverageOut"},"sources":{"items":{"$ref":"#/components/schemas/CategorySourceOut"},"type":"array","title":"Sources"},"truncated":{"type":"boolean","title":"Truncated","default":false}},"type":"object","required":["items","coverage","sources"],"title":"CategoryListOut"},"CategoryMappingClear":{"properties":{"category_value":{"type":"string","maxLength":500,"minLength":1,"title":"Category Value"}},"type":"object","required":["category_value"],"title":"CategoryMappingClear"},"CategoryMappingCreate":{"properties":{"category_value":{"type":"string","maxLength":500,"minLength":1,"title":"Category Value"},"taxonomy_id":{"type":"integer","exclusiveMinimum":0.0,"title":"Taxonomy Id"}},"type":"object","required":["category_value","taxonomy_id"],"title":"CategoryMappingCreate"},"CategoryMappingOut":{"properties":{"category_value":{"type":"string","title":"Category Value"},"taxonomy_id":{"type":"integer","title":"Taxonomy Id"},"taxonomy_path":{"type":"string","title":"Taxonomy Path"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["category_value","taxonomy_id","taxonomy_path","updated_at"],"title":"CategoryMappingOut"},"CategorySourceCandidateOut":{"properties":{"field":{"type":"string","title":"Field"},"product_count":{"type":"integer","title":"Product Count"}},"type":"object","required":["field","product_count"],"title":"CategorySourceCandidateOut","description":"One field that could hold a source's categories, and its coverage."},"CategorySourceOut":{"properties":{"source_id":{"type":"string","format":"uuid","title":"Source Id"},"source_name":{"type":"string","title":"Source Name"},"field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field"},"configured":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Configured"},"auto":{"type":"boolean","title":"Auto"},"candidates":{"items":{"$ref":"#/components/schemas/CategorySourceCandidateOut"},"type":"array","title":"Candidates"}},"type":"object","required":["source_id","source_name","field","configured","auto","candidates"],"title":"CategorySourceOut","description":"Which product field a source's categories are read from, and how that was decided."},"CategorySourceUpdate":{"properties":{"field":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Field"}},"type":"object","title":"CategorySourceUpdate","description":"``product_type``, ``google_product_category``, ``attributes.<key>``, or\nnull to go back to detecting it."},"ChangeKind":{"type":"string","enum":["created","updated","deactivated","reactivated"],"title":"ChangeKind"},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","maxLength":200,"minLength":1,"title":"Current Password"},"new_password":{"type":"string","maxLength":200,"minLength":1,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest"},"Channel":{"type":"string","enum":["meta","google","tiktok","pinterest","meta_supplementary","google_supplementary","microsoft","custom"],"title":"Channel"},"ChannelCatalogOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"business_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Id"},"business_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Name"}},"type":"object","required":["id","name"],"title":"ChannelCatalogOut"},"ChannelConnectionOut":{"properties":{"channel":{"type":"string","title":"Channel"},"status":{"type":"string","title":"Status"},"status_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Reason"},"configured":{"type":"boolean","title":"Configured"},"external_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Account Id"},"external_account_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Account Name"},"external_catalog_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Catalog Id"},"external_catalog_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Catalog Name"},"token_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Token Expires At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["channel","status","configured"],"title":"ChannelConnectionOut"},"CheckFindingOut":{"properties":{"code":{"type":"string","title":"Code"},"layer":{"type":"string","title":"Layer"},"detail":{"type":"string","title":"Detail","default":""}},"type":"object","required":["code","layer"],"title":"CheckFindingOut","description":"Something wrong with one layer: ``text_cut``, ``safe_zone``, ``image_missing``…"},"ChooseChannelCatalog":{"properties":{"catalog_id":{"type":"string","maxLength":100,"minLength":1,"title":"Catalog Id"},"catalog_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Catalog Name"}},"type":"object","required":["catalog_id"],"title":"ChooseChannelCatalog"},"CompanyAssetOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"kind":{"type":"string","title":"Kind"},"content_hash":{"type":"string","title":"Content Hash"},"mime_type":{"type":"string","title":"Mime Type"},"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"byte_size":{"type":"integer","title":"Byte Size"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","kind","content_hash","mime_type","width","height","byte_size","updated_at"],"title":"CompanyAssetOut"},"CompanyCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"slug":{"type":"string","maxLength":100,"minLength":1,"pattern":"^[a-z0-9][a-z0-9-]*$","title":"Slug"}},"type":"object","required":["name","slug"],"title":"CompanyCreate"},"CompanyDefaultsOut":{"properties":{"currency":{"type":"string","title":"Currency"},"locale":{"type":"string","title":"Locale"}},"type":"object","required":["currency","locale"],"title":"CompanyDefaultsOut","description":"The currency and language most of the company's products come in.\n\nA new template's price format and the built-in elements start from them\n(decision 201: a catalog used to say; its sources do now)."},"CompanyFontOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"family":{"type":"string","title":"Family"},"weight":{"type":"integer","title":"Weight"},"style":{"type":"string","title":"Style"},"content_hash":{"type":"string","title":"Content Hash"},"mime_type":{"type":"string","title":"Mime Type"},"byte_size":{"type":"integer","title":"Byte Size"},"original_filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Filename"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","family","weight","style","content_hash","mime_type","byte_size","original_filename","updated_at"],"title":"CompanyFontOut","description":"One uploaded face. ``family`` is read from the file, and is what a template stores."},"CompanyOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","slug","status","created_at"],"title":"CompanyOut"},"ConnectOut":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"ConnectOut","description":"Where to send the browser: a platform's consent page, or a store's approval page."},"ConnectedAppOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"redirect_host":{"type":"string","title":"Redirect Host"},"verified_host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verified Host"},"logo_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Uri"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"person":{"type":"string","title":"Person"},"connected_at":{"type":"string","format":"date-time","title":"Connected At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","name","redirect_host","user_id","person","connected_at"],"title":"ConnectedAppOut","description":"An app a person signed in, for this company."},"ConnectionOut":{"properties":{"connector":{"type":"string","title":"Connector"},"status":{"type":"string","enum":["not_connected","pending","connected","error","disconnected"],"title":"Status"},"status_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Reason"},"shop_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Shop Id"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"method":{"anyOf":[{"type":"string","enum":["oauth","approval","keys"]},{"type":"null"}],"title":"Method"},"connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Connected At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"missing":{"items":{"type":"string"},"type":"array","title":"Missing"}},"type":"object","required":["connector","status"],"title":"ConnectionOut","description":"A platform source's connection (design 15.0 §5): how the company's connection\nit reads through stands — a shop's, found by the source's address, or the\ncompany's login to a catalog's platform. Never its credentials."},"ConnectorOut":{"properties":{"connector":{"type":"string","title":"Connector"},"name":{"type":"string","title":"Name"},"family":{"type":"string","enum":["shop","login"],"title":"Family"},"configured":{"type":"boolean","title":"Configured"},"login":{"anyOf":[{"$ref":"#/components/schemas/LoginOut"},{"type":"null"}]},"shops":{"items":{"$ref":"#/components/schemas/ShopOut"},"type":"array","title":"Shops"},"sources":{"items":{"$ref":"#/components/schemas/SourceRefOut"},"type":"array","title":"Sources"}},"type":"object","required":["connector","name","family","configured"],"title":"ConnectorOut","description":"One connector on the Connectors page (design 15.0 §5)."},"ConnectorsOut":{"properties":{"connectors":{"items":{"$ref":"#/components/schemas/ConnectorOut"},"type":"array","title":"Connectors"}},"type":"object","required":["connectors"],"title":"ConnectorsOut"},"CreativeProfile":{"type":"string","enum":["designed","clean","lifestyle"],"title":"CreativeProfile","description":"Which picture of a product a template makes for a channel (decision 124).\n\n``designed`` is the template as drawn. ``clean`` is the product alone on a\nplain ground — what Google Shopping requires of ``image_link``, which\ndisapproves a product whose picture carries a price, a badge, a call to\naction, a logo or a border. ``lifestyle`` (decision 128) is the product's\napproved cut-out on a vivid colour or a scene, for Google's\n``lifestyle_image_link``: a picture a feed sends beside its main one,\nnever instead of it."},"DesignBackgroundIn":{"properties":{"picture":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Picture"},"color":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Color"},"gradient":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":5,"minItems":2},{"type":"null"}],"title":"Gradient"},"angle":{"type":"number","maximum":360.0,"minimum":0.0,"title":"Angle","default":180}},"additionalProperties":false,"type":"object","title":"DesignBackgroundIn","description":"What a design stands on: one of a library picture, a colour, a gradient."},"DesignPartIn":{"properties":{"kind":{"type":"string","enum":["text","product_image","price","regular_price","discount_badge","logo","picture","shape","button","builtin"],"title":"Kind"},"box":{"items":{"type":"number"},"type":"array","maxItems":4,"minItems":4,"title":"Box"},"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"},"show_when":{"anyOf":[{"type":"string","enum":["always","on_sale","not_on_sale","in_stock","sold_out"]},{"type":"null"}],"title":"Show When"},"text":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Text"},"style":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Style"},"color":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Color"},"fill":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Fill"},"align":{"anyOf":[{"type":"string","enum":["left","center","right"]},{"type":"null"}],"title":"Align"},"lines":{"anyOf":[{"type":"integer","maximum":6.0,"minimum":1.0},{"type":"null"}],"title":"Lines"},"weight":{"anyOf":[{"type":"integer","maximum":900.0,"minimum":100.0},{"type":"null"}],"title":"Weight"},"uppercase":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Uppercase"},"size":{"anyOf":[{"type":"number","maximum":0.5,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Size"},"picture":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Picture"},"fit":{"anyOf":[{"type":"string","enum":["contain","cover"]},{"type":"null"}],"title":"Fit"},"shadow":{"type":"boolean","title":"Shadow","default":false},"radius":{"anyOf":[{"type":"number","maximum":0.5,"minimum":0.0},{"type":"null"}],"title":"Radius"},"opacity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Opacity"},"shape":{"anyOf":[{"type":"string","enum":["rect","circle","burst","tag","ribbon","arrow","bubble","pointer"]},{"type":"null"}],"title":"Shape"},"builtin":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Builtin"},"look":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Look"},"on_dark":{"type":"boolean","title":"On Dark","default":false},"image":{"type":"integer","maximum":4.0,"minimum":0.0,"title":"Image","default":0},"rotation":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Rotation"},"stroke":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Stroke"},"stroke_width":{"anyOf":[{"type":"number","maximum":0.05,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Stroke Width"},"repeat":{"type":"boolean","title":"Repeat","default":false},"photo":{"anyOf":[{"type":"string","enum":["main","lifestyle","packshot","close_up"]},{"type":"null"}],"title":"Photo"}},"additionalProperties":false,"type":"object","required":["kind","box"],"title":"DesignPartIn","description":"One part of a design: what it is, and where, by shares of the picture."},"DesignPictureIn":{"properties":{"width":{"type":"integer","maximum":8192.0,"minimum":64.0,"title":"Width"},"height":{"type":"integer","maximum":8192.0,"minimum":64.0,"title":"Height"}},"additionalProperties":false,"type":"object","required":["width","height"],"title":"DesignPictureIn","description":"The picture a design was laid out on (decision 242): only its shape counts."},"DrawnBannerRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"product_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":12,"title":"Product Ids"},"shape":{"anyOf":[{"type":"string","enum":["wide","square","portrait","story"]},{"type":"null"}],"title":"Shape"},"width":{"anyOf":[{"type":"integer","maximum":4096.0,"minimum":100.0},{"type":"null"}],"title":"Width"},"height":{"anyOf":[{"type":"integer","maximum":4096.0,"minimum":100.0},{"type":"null"}],"title":"Height"},"background":{"title":"Background"},"font_family":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Font Family"},"layers":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":200,"minItems":1,"title":"Layers"},"elements":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Elements"},"preview":{"type":"boolean","title":"Preview","default":false}},"type":"object","required":["name","layers"],"title":"DrawnBannerRequest","description":"A banner drawn as its layers (decision 252): any layer, property, outline or element,\nin a frame of one of the shapes or of any size; the products are read by their place,\n``banner.products[n].<field>``, and written in when it is drawn."},"ElementPreviewRequest":{"properties":{"definition":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Definition"},"document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document"},"format":{"type":"string","title":"Format","default":"1:1"},"product_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"},"look":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Look"},"variant":{"type":"string","maxLength":64,"title":"Variant","default":"default"}},"type":"object","title":"ElementPreviewRequest","description":"An element drawn alone for one product (decision 249): its definition, as the\nlibrary or a template keeps it, and one of its looks — or, as the editor sends it,\nthe element as a document of its own (one format, its body as the layers)."},"ElementSheetRequest":{"properties":{"definition":{"additionalProperties":true,"type":"object","title":"Definition"},"product_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":6,"minItems":1},{"type":"null"}],"title":"Product Ids"},"look":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Look"},"side":{"type":"integer","maximum":2000.0,"minimum":480.0,"title":"Side","default":1200}},"type":"object","required":["definition"],"title":"ElementSheetRequest","description":"An element drawn alone for a few products, on one PNG (decision 249)."},"ExperimentCreate":{"properties":{"template_id":{"type":"string","format":"uuid","title":"Template Id"},"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"variants":{"items":{"type":"string"},"type":"array","maxItems":8,"minItems":2,"title":"Variants"},"format":{"type":"string","pattern":"^(1:1|4:5|9:16)$","title":"Format","default":"1:1"},"hypothesis":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Hypothesis"}},"type":"object","required":["template_id","name","variants"],"title":"ExperimentCreate"},"ExperimentOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"template_id":{"type":"string","format":"uuid","title":"Template Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"variants":{"items":{},"type":"array","title":"Variants"},"format":{"type":"string","title":"Format"},"hypothesis":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hypothesis"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"assignments":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Assignments"}},"type":"object","required":["id","template_id","name","status","variants","format","hypothesis","started_at","ended_at","created_at","updated_at"],"title":"ExperimentOut"},"ExperimentStatus":{"type":"string","enum":["draft","running","completed"],"title":"ExperimentStatus"},"ExperimentUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"$ref":"#/components/schemas/ExperimentStatus"},{"type":"null"}]},"hypothesis":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Hypothesis"}},"additionalProperties":false,"type":"object","title":"ExperimentUpdate"},"ExportErrorOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"product_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field"}},"type":"object","required":["id","product_id","external_id","code","message","field"],"title":"ExportErrorOut"},"ExportRunOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"output_feed_id":{"type":"string","format":"uuid","title":"Output Feed Id"},"mapping_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Mapping Version Id"},"rule_version_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Rule Version Ids"},"trigger":{"type":"string","title":"Trigger"},"status":{"type":"string","title":"Status"},"items_selected":{"type":"integer","title":"Items Selected"},"items_written":{"type":"integer","title":"Items Written"},"items_filtered_out":{"type":"integer","title":"Items Filtered Out"},"items_invalid":{"type":"integer","title":"Items Invalid"},"file_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Hash"},"byte_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Byte Size"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"blocked_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blocked Reason"},"stats":{"additionalProperties":true,"type":"object","title":"Stats"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","output_feed_id","mapping_version_id","trigger","status","items_selected","items_written","items_filtered_out","items_invalid","file_hash","byte_size","error_message","stats","started_at","finished_at","created_at"],"title":"ExportRunOut"},"ExportStartRequest":{"properties":{"override_gate":{"type":"boolean","title":"Override Gate","default":false}},"additionalProperties":false,"type":"object","title":"ExportStartRequest","description":"What ``POST …/exports`` may say; the body is optional."},"FeedDelivery":{"type":"string","enum":["url","upload"],"title":"FeedDelivery","description":"How a feed source's file arrives: fetched from an address, or uploaded."},"FeedFormat":{"type":"string","enum":["csv","xml"],"title":"FeedFormat","description":"A feed has exactly one format. It is never both."},"FeedInfoOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"products":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Products"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},"type":"object","required":["id","name"],"title":"FeedInfoOut","description":"One of a catalog's feeds (design 15.0 §4): a data feed, feed, product feed\nor data source, with the file's address when the platform fetches one."},"FeedSettingsIn":{"properties":{"delivery":{"$ref":"#/components/schemas/FeedDelivery"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"format":{"$ref":"#/components/schemas/FeedFormat"},"delimiter":{"anyOf":[{"type":"string","maxLength":4},{"type":"null"}],"title":"Delimiter"},"encoding":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Encoding"},"item_path":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Item Path"},"credential_secret_ref":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Credential Secret Ref"}},"additionalProperties":false,"type":"object","required":["delivery","format"],"title":"FeedSettingsIn","description":"What a feed source needs: its file, and how to read it."},"FeedSourceCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"kind":{"type":"string","const":"feed","title":"Kind","default":"feed"},"settings":{"$ref":"#/components/schemas/FeedSettingsIn"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","default":"SEK"},"locale":{"type":"string","maxLength":10,"minLength":2,"title":"Locale","default":"sv-SE"},"missing_item_policy":{"$ref":"#/components/schemas/MissingItemPolicy","default":"deactivate"}},"type":"object","required":["name","settings"],"title":"FeedSourceCreate","description":"A feed source (decision 201): a CSV or XML file, fetched or uploaded."},"FieldCatalogue":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/FieldGroup"},"type":"array","title":"Groups"}},"type":"object","required":["groups"],"title":"FieldCatalogue"},"FieldGroup":{"properties":{"namespace":{"type":"string","title":"Namespace"},"label":{"type":"string","title":"Label"},"fields":{"items":{"$ref":"#/components/schemas/FieldInfo"},"type":"array","title":"Fields"}},"type":"object","required":["namespace","label","fields"],"title":"FieldGroup"},"FieldInfo":{"properties":{"path":{"type":"string","title":"Path"},"label":{"type":"string","title":"Label"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"example":{"title":"Example"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["path","label"],"title":"FieldInfo","description":"One path an expression may read; ``type`` is null when not known."},"FieldValueOut":{"properties":{"value":{"type":"string","title":"Value"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["value","count"],"title":"FieldValueOut"},"FieldValuesOut":{"properties":{"field":{"type":"string","title":"Field"},"values":{"items":{"$ref":"#/components/schemas/FieldValueOut"},"type":"array","title":"Values"},"truncated":{"type":"boolean","title":"Truncated"}},"type":"object","required":["field","values","truncated"],"title":"FieldValuesOut"},"FontRequestIn":{"properties":{"family":{"type":"string","maxLength":100,"minLength":1,"title":"Family"},"weight":{"type":"integer","maximum":900.0,"minimum":100.0,"title":"Weight"},"style":{"type":"string","pattern":"^(normal|italic)$","title":"Style","default":"normal"}},"type":"object","required":["family","weight"],"title":"FontRequestIn","description":"What one text layer asks for."},"FontResolveOut":{"properties":{"faces":{"items":{"$ref":"#/components/schemas/ResolvedFontOut"},"type":"array","title":"Faces"},"unavailable":{"items":{"$ref":"#/components/schemas/UnavailableFontOut"},"type":"array","title":"Unavailable"},"advances":{"additionalProperties":{"$ref":"#/components/schemas/AdvanceTableOut"},"type":"object","title":"Advances"}},"type":"object","required":["faces","unavailable"],"title":"FontResolveOut"},"FontResolveRequest":{"properties":{"requests":{"items":{"$ref":"#/components/schemas/FontRequestIn"},"type":"array","maxItems":32,"title":"Requests"}},"type":"object","required":["requests"],"title":"FontResolveRequest"},"GoogleMerchantSettings":{"properties":{"account_id":{"type":"string","pattern":"^[0-9]{1,32}$","title":"Account Id"},"account_name":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Account Name"},"data_source_id":{"anyOf":[{"type":"string","pattern":"^[0-9]{1,32}$"},{"type":"null"}],"title":"Data Source Id"},"feed_label":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Feed Label"},"content_language":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Content Language"}},"additionalProperties":false,"type":"object","required":["account_id"],"title":"GoogleMerchantSettings","description":"A Google Merchant Center account's products — the catalog Google Ads'\nShopping and Performance Max campaigns advertise — read through the\ncompany's Google login."},"GoogleSourceCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"currency":{"anyOf":[{"type":"string","maxLength":3,"minLength":3},{"type":"null"}],"title":"Currency"},"locale":{"anyOf":[{"type":"string","maxLength":10,"minLength":2},{"type":"null"}],"title":"Locale"},"missing_item_policy":{"$ref":"#/components/schemas/MissingItemPolicy","default":"deactivate"},"kind":{"type":"string","const":"google","title":"Kind"},"settings":{"$ref":"#/components/schemas/GoogleMerchantSettings"}},"type":"object","required":["name","kind","settings"],"title":"GoogleSourceCreate","description":"A Google Merchant Center account's products as a source (design 15.0), read\nthrough the company's Google login."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HeroFrameOut":{"properties":{"name":{"type":"string","enum":["wide","tall"],"title":"Name"},"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"slots":{"type":"integer","title":"Slots"},"pages":{"type":"integer","title":"Pages"},"layers":{"items":{"$ref":"#/components/schemas/HeroLayerOut"},"type":"array","title":"Layers"}},"type":"object","required":["name","width","height","slots","pages","layers"],"title":"HeroFrameOut"},"HeroLayerOut":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"product":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Product"},"top":{"type":"boolean","title":"Top","default":false}},"type":"object","required":["id","type"],"title":"HeroLayerOut","description":"A layer of a frame, as the hero's settings name it."},"HeroLinksOut":{"properties":{"embed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Embed Url"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"script_url":{"type":"string","title":"Script Url"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"iframe_snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Iframe Snippet"}},"type":"object","required":["script_url"],"title":"HeroLinksOut","description":"Where the hero shows: the public ones only once it is published."},"HeroOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","enum":["draft","published","changed"],"title":"Status"},"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"tall":{"type":"boolean","title":"Tall"},"made_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Made By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"zalia_url":{"type":"string","title":"Zalia Url"},"drawing":{"additionalProperties":true,"type":"object","title":"Drawing"},"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"frames":{"items":{"$ref":"#/components/schemas/HeroFrameOut"},"type":"array","title":"Frames"},"products":{"items":{"$ref":"#/components/schemas/HeroProductOut"},"type":"array","title":"Products"},"links":{"$ref":"#/components/schemas/HeroLinksOut"},"notes":{"items":{"type":"string"},"type":"array","title":"Notes"},"preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview"},"preview_media_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Media Type"}},"type":"object","required":["id","name","status","width","height","tall","created_at","updated_at","zalia_url","drawing","settings","frames","products","links"],"title":"HeroOut"},"HeroProductOut":{"properties":{"product_id":{"type":"string","format":"uuid","title":"Product Id"},"title":{"type":"string","title":"Title"},"price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price"},"was":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Was"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"picture":{"anyOf":[{"type":"string","enum":["cutout","photo"]},{"type":"null"}],"title":"Picture"}},"type":"object","required":["product_id","title"],"title":"HeroProductOut"},"HeroRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"drawing":{"additionalProperties":true,"type":"object","title":"Drawing"},"settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Settings"},"publish":{"type":"boolean","title":"Publish","default":false},"preview":{"type":"boolean","title":"Preview","default":false}},"type":"object","required":["name","drawing"],"title":"HeroRequest","description":"A website hero: its drawing — ``frames.wide`` and, for narrow screens,\n``frames.tall``, each ``{width, height, background, layers}``, drawn as a banner is\n(decision 252), the products read by their place, ``banner.products[n].<field>``,\nthe call to action's words as ``hero.cta`` — and its settings."},"HeroSummaryOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","enum":["draft","published","changed"],"title":"Status"},"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"tall":{"type":"boolean","title":"Tall"},"made_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Made By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"zalia_url":{"type":"string","title":"Zalia Url"}},"type":"object","required":["id","name","status","width","height","tall","created_at","updated_at","zalia_url"],"title":"HeroSummaryOut"},"HeroUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"drawing":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Drawing"},"settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Settings"},"publish":{"type":"boolean","title":"Publish","default":false},"preview":{"type":"boolean","title":"Preview","default":false}},"type":"object","title":"HeroUpdate","description":"What changes in the draft: each part given replaces that part, a settings section a\nkey at a time (``null`` in ``texts`` or ``animation.layers`` takes one away)."},"ImageWorkCounts":{"properties":{"images":{"type":"integer","title":"Images"},"batches":{"type":"integer","title":"Batches"}},"type":"object","required":["images","batches"],"title":"ImageWorkCounts"},"ImageWorkPreview":{"properties":{"batch_size":{"type":"integer","title":"Batch Size"},"download":{"$ref":"#/components/schemas/ImageWorkCounts"},"cutout":{"$ref":"#/components/schemas/ImageWorkCounts"},"cutout_new":{"$ref":"#/components/schemas/ImageWorkCounts"},"download_all":{"$ref":"#/components/schemas/ImageWorkCounts"},"cutout_all":{"$ref":"#/components/schemas/ImageWorkCounts"},"downloads_busy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Downloads Busy"},"cutouts_busy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cutouts Busy"}},"type":"object","required":["batch_size","download","cutout","cutout_new","download_all","cutout_all"],"title":"ImageWorkPreview","description":"What each choice on Images would do now, before anything is asked."},"ImageWorkRequest":{"properties":{"download":{"type":"boolean","title":"Download","default":true},"cutout":{"type":"boolean","title":"Cutout","default":true},"cutout_scope":{"type":"string","enum":["all","new"],"title":"Cutout Scope","default":"all"},"everything":{"type":"boolean","title":"Everything","default":false}},"type":"object","title":"ImageWorkRequest"},"ImageWorkStarted":{"properties":{"plan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Id"},"download":{"$ref":"#/components/schemas/ImageWorkCounts"},"cutout":{"$ref":"#/components/schemas/ImageWorkCounts"},"cutout_after_downloads":{"type":"integer","title":"Cutout After Downloads","default":0},"prepare_after_downloads":{"type":"integer","title":"Prepare After Downloads","default":0}},"type":"object","required":["plan_id","download","cutout"],"title":"ImageWorkStarted"},"ImportChangeOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"product_id":{"type":"string","format":"uuid","title":"Product Id"},"external_id":{"type":"string","title":"External Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"kind":{"type":"string","title":"Kind"},"diff":{"additionalProperties":true,"type":"object","title":"Diff"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","product_id","external_id","title","kind","diff","created_at"],"title":"ImportChangeOut","description":"One product's change within an import, with enough identity to link to it."},"ImportChangesOut":{"properties":{"summary":{"additionalProperties":{"type":"integer"},"type":"object","title":"Summary"},"items":{"items":{"$ref":"#/components/schemas/ImportChangeOut"},"type":"array","title":"Items"}},"type":"object","required":["summary","items"],"title":"ImportChangesOut"},"ImportErrorLevel":{"type":"string","enum":["warning","error"],"title":"ImportErrorLevel"},"ImportErrorOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"level":{"type":"string","title":"Level"},"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"row_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Number"},"source_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Key"},"field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","level","code","message","row_number","source_key","field","created_at"],"title":"ImportErrorOut"},"ImportRunOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"source_id":{"type":"string","format":"uuid","title":"Source Id"},"mapping_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Mapping Version Id"},"kind":{"type":"string","title":"Kind"},"status":{"type":"string","title":"Status"},"trigger":{"type":"string","title":"Trigger","default":"manual"},"job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"},"file_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Hash"},"items_read":{"type":"integer","title":"Items Read"},"items_valid":{"type":"integer","title":"Items Valid"},"items_invalid":{"type":"integer","title":"Items Invalid"},"items_duplicate":{"type":"integer","title":"Items Duplicate"},"items_out_of_scope":{"type":"integer","title":"Items Out Of Scope","default":0},"products_created":{"type":"integer","title":"Products Created"},"products_updated":{"type":"integer","title":"Products Updated"},"products_unchanged":{"type":"integer","title":"Products Unchanged"},"products_deactivated":{"type":"integer","title":"Products Deactivated"},"products_reactivated":{"type":"integer","title":"Products Reactivated"},"blocked_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blocked Reason"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"stats":{"additionalProperties":true,"type":"object","title":"Stats"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","source_id","mapping_version_id","kind","status","job_id","file_hash","items_read","items_valid","items_invalid","items_duplicate","products_created","products_updated","products_unchanged","products_deactivated","products_reactivated","blocked_reason","error_message","stats","started_at","published_at","finished_at","created_at"],"title":"ImportRunOut"},"ImportScopeIn":{"properties":{"filter":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter"},"external_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"External Ids"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"},"pick":{"type":"string","enum":["first","spread"],"title":"Pick","default":"first"}},"additionalProperties":false,"type":"object","title":"ImportScopeIn","description":"Which part of the feed an import brings in (decision 96).\n\nEvery field is optional, and a scope that narrows nothing is the whole\nfeed. The bounds, and the rule that ``filter`` and ``external_ids`` do not\ngo together, are checked by ``core.pipeline.scope.normalize_import_scope``,\nwhich answers 400 ``invalid-import-scope`` naming each problem."},"ImportStartRequest":{"properties":{"idempotency_key":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Idempotency Key"},"override_gate":{"type":"boolean","title":"Override Gate","default":false},"synchronous":{"type":"boolean","title":"Synchronous","default":false}},"type":"object","title":"ImportStartRequest"},"InvitationOut":{"properties":{"company_id":{"type":"string","format":"uuid","title":"Company Id"},"company_name":{"type":"string","title":"Company Name"},"role":{"type":"string","title":"Role"},"invited_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invited By Name"},"invited_at":{"type":"string","format":"date-time","title":"Invited At"}},"type":"object","required":["company_id","company_name","role","invited_at"],"title":"InvitationOut","description":"A company that asked this person to join (decision 205)."},"InviteOut":{"properties":{"member":{"$ref":"#/components/schemas/MemberOut"},"temporary_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temporary Password"},"invited":{"type":"boolean","title":"Invited","default":false}},"type":"object","required":["member"],"title":"InviteOut"},"InviteRequest":{"properties":{"email":{"type":"string","maxLength":320,"minLength":3,"title":"Email"},"display_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Display Name"},"role":{"$ref":"#/components/schemas/MembershipRole","default":"member"}},"type":"object","required":["email"],"title":"InviteRequest"},"KerningOut":{"properties":{"left":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Left"},"right":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Right"},"pairs":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Pairs"}},"type":"object","required":["left","right","pairs"],"title":"KerningOut","description":"A font file's kerning, in thousandths of an em (decision 149).\n\n``left`` and ``right`` are ``[first, last, group]`` runs of code points for\neach side of a pair; each of ``pairs`` is one left group's row, ``[left,\nright, value, right, value, …]``, only the pairs that are not 0."},"LibraryElementCreate":{"properties":{"definition":{"additionalProperties":true,"type":"object","title":"Definition"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"}},"type":"object","required":["definition"],"title":"LibraryElementCreate","description":"A new element of the company's library (decision 168): its first version."},"LibraryElementOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"version":{"type":"integer","title":"Version"},"definition":{"additionalProperties":true,"type":"object","title":"Definition"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"updated_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Name"}},"type":"object","required":["id","name","version","definition","updated_at"],"title":"LibraryElementOut","description":"A library element with its newest version's definition, for the editor to draw and insert."},"LibraryElementPublish":{"properties":{"definition":{"additionalProperties":true,"type":"object","title":"Definition"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"}},"type":"object","required":["definition"],"title":"LibraryElementPublish","description":"A library element's next version: an unchanged definition makes none."},"LibraryElementPublished":{"properties":{"element":{"$ref":"#/components/schemas/LibraryElementOut"},"version":{"$ref":"#/components/schemas/LibraryElementVersionOut"},"created":{"type":"boolean","title":"Created"}},"type":"object","required":["element","version","created"],"title":"LibraryElementPublished","description":"What a publish made: the version the library now has, and whether it is new."},"LibraryElementUpdate":{"properties":{"name":{"type":"string","maxLength":60,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"LibraryElementUpdate"},"LibraryElementVersionOut":{"properties":{"version":{"type":"integer","title":"Version"},"definition":{"additionalProperties":true,"type":"object","title":"Definition"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Name"}},"type":"object","required":["version","definition","notes","created_at"],"title":"LibraryElementVersionOut"},"LoginOut":{"properties":{"status":{"type":"string","enum":["not_connected","connected","error","disconnected"],"title":"Status"},"status_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Reason"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"account_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Name"},"connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Connected At"},"connected_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected By"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"data_access_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Data Access Expires At"},"permissions":{"items":{"$ref":"#/components/schemas/PermissionOut"},"type":"array","title":"Permissions"},"missing":{"items":{"type":"string"},"type":"array","title":"Missing"},"publishing_catalog":{"anyOf":[{"$ref":"#/components/schemas/CatalogRefOut"},{"type":"null"}]}},"type":"object","required":["status"],"title":"LoginOut","description":"A company's login to a catalog platform (design 15.0 §5). Never its tokens."},"LoginRequest":{"properties":{"email":{"type":"string","maxLength":320,"minLength":3,"title":"Email"},"password":{"type":"string","maxLength":200,"minLength":1,"title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"MappingCreate":{"properties":{"document":{"additionalProperties":true,"type":"object","title":"Document"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"activate":{"type":"boolean","title":"Activate","default":true}},"type":"object","required":["document"],"title":"MappingCreate"},"MappingVersionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"source_id":{"type":"string","format":"uuid","title":"Source Id"},"version":{"type":"integer","title":"Version"},"document":{"additionalProperties":true,"type":"object","title":"Document"},"document_hash":{"type":"string","title":"Document Hash"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","source_id","version","document","document_hash","notes","created_at"],"title":"MappingVersionOut"},"MeOut":{"properties":{"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"must_change_password":{"type":"boolean","title":"Must Change Password","default":false},"api_key":{"type":"boolean","title":"Api Key","default":false},"platform_admin":{"type":"boolean","title":"Platform Admin","default":false},"memberships":{"items":{"$ref":"#/components/schemas/MembershipOut"},"type":"array","title":"Memberships"},"invitations":{"items":{"$ref":"#/components/schemas/InvitationOut"},"type":"array","title":"Invitations"}},"type":"object","required":["user_id","email","display_name","memberships"],"title":"MeOut"},"MediaTokenOut":{"properties":{"token":{"type":"string","title":"Token"},"base_url":{"type":"string","title":"Base Url"}},"type":"object","required":["token","base_url"],"title":"MediaTokenOut"},"MemberOut":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"email":{"type":"string","title":"Email"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"role":{"type":"string","title":"Role"},"is_active":{"type":"boolean","title":"Is Active"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"joined_at":{"type":"string","format":"date-time","title":"Joined At"},"pending":{"type":"boolean","title":"Pending","default":false}},"type":"object","required":["user_id","email","display_name","role","is_active","last_login_at","joined_at"],"title":"MemberOut"},"MembershipOut":{"properties":{"company_id":{"type":"string","format":"uuid","title":"Company Id"},"company_name":{"type":"string","title":"Company Name"},"company_slug":{"type":"string","title":"Company Slug"},"company_status":{"type":"string","title":"Company Status"},"role":{"type":"string","title":"Role"}},"type":"object","required":["company_id","company_name","company_slug","company_status","role"],"title":"MembershipOut"},"MembershipRole":{"type":"string","enum":["owner","admin","member","viewer"],"title":"MembershipRole","description":"Owner and admin manage the company; member works on its products; viewer reads."},"MerchantCategoryOut":{"properties":{"value":{"type":"string","title":"Value"},"product_count":{"type":"integer","title":"Product Count"},"taxonomy_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Taxonomy Id"},"taxonomy_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Taxonomy Path"}},"type":"object","required":["value","product_count"],"title":"MerchantCategoryOut","description":"One distinct category value of the products, and what it maps to."},"MetaCatalogSettings":{"properties":{"catalog_id":{"type":"string","pattern":"^[0-9]{1,32}$","title":"Catalog Id"},"catalog_name":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Catalog Name"},"business_id":{"anyOf":[{"type":"string","pattern":"^[0-9]{1,32}$"},{"type":"null"}],"title":"Business Id"},"feed_id":{"anyOf":[{"type":"string","pattern":"^[0-9]{1,32}$"},{"type":"null"}],"title":"Feed Id"},"only_approved":{"type":"boolean","title":"Only Approved","default":false}},"additionalProperties":false,"type":"object","required":["catalog_id"],"title":"MetaCatalogSettings","description":"A Meta catalog (Commerce Manager) read through the company's Meta login."},"MetaSourceCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"currency":{"anyOf":[{"type":"string","maxLength":3,"minLength":3},{"type":"null"}],"title":"Currency"},"locale":{"anyOf":[{"type":"string","maxLength":10,"minLength":2},{"type":"null"}],"title":"Locale"},"missing_item_policy":{"$ref":"#/components/schemas/MissingItemPolicy","default":"deactivate"},"kind":{"type":"string","const":"meta","title":"Kind"},"settings":{"$ref":"#/components/schemas/MetaCatalogSettings"}},"type":"object","required":["name","kind","settings"],"title":"MetaSourceCreate","description":"A Meta catalog as a source (design 15.0), read through the company's Meta\nlogin: a draft read every six hours, its preset mapping active. The\nsettings are a catalog's from ``GET …/connectors/meta/catalogs``."},"MetricsImportOut":{"properties":{"rows":{"type":"integer","title":"Rows"},"skipped":{"type":"integer","title":"Skipped"}},"type":"object","required":["rows","skipped"],"title":"MetricsImportOut"},"MissingItemPolicy":{"type":"string","enum":["deactivate","keep"],"title":"MissingItemPolicy","description":"What to do with products absent from the latest full import."},"OAuthAnswerOut":{"properties":{"redirect_to":{"type":"string","title":"Redirect To"}},"type":"object","required":["redirect_to"],"title":"OAuthAnswerOut","description":"Where the browser goes next: back to the app, with a code or a refusal."},"OAuthAppOut":{"properties":{"name":{"type":"string","title":"Name"},"redirect_host":{"type":"string","title":"Redirect Host"},"logo_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Uri"},"client_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Uri"},"verified_host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verified Host"}},"type":"object","required":["name","redirect_host"],"title":"OAuthAppOut","description":"The app asking, as the consent page names it."},"OAuthApproveIn":{"properties":{"company_id":{"type":"string","format":"uuid","title":"Company Id"}},"type":"object","required":["company_id"],"title":"OAuthApproveIn"},"OAuthCompanyOut":{"properties":{"company_id":{"type":"string","format":"uuid","title":"Company Id"},"name":{"type":"string","title":"Name"},"role":{"type":"string","title":"Role"}},"type":"object","required":["company_id","name","role"],"title":"OAuthCompanyOut"},"OAuthRequestOut":{"properties":{"app":{"$ref":"#/components/schemas/OAuthAppOut"},"can":{"items":{"type":"string"},"type":"array","title":"Can"},"companies":{"items":{"$ref":"#/components/schemas/OAuthCompanyOut"},"type":"array","title":"Companies"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["app","can","companies","expires_at"],"title":"OAuthRequestOut","description":"A sign-in waiting for the person's answer."},"OutputFeedCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"channel":{"$ref":"#/components/schemas/Channel"},"format":{"$ref":"#/components/schemas/FeedFormat"},"filter_document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter Document"},"product_set_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Set Id"},"schedule_minutes":{"anyOf":[{"type":"integer","maximum":10080.0,"minimum":5.0},{"type":"null"}],"title":"Schedule Minutes"},"refresh_after_import":{"type":"boolean","title":"Refresh After Import","default":false},"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"template_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Template Id"},"creative_format":{"type":"string","pattern":"^(1:1|4:5|9:16)$","title":"Creative Format","default":"1:1"},"experiment_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Experiment Id"},"creative_profile":{"anyOf":[{"type":"string","enum":["designed","clean"]},{"type":"null"}],"title":"Creative Profile"},"lifestyle_format":{"anyOf":[{"type":"string","enum":["1:1","4:5"]},{"type":"null"}],"title":"Lifestyle Format"},"source_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":200},{"type":"null"}],"title":"Source Ids"},"all_formats":{"type":"boolean","title":"All Formats","default":false}},"type":"object","required":["name","channel","format"],"title":"OutputFeedCreate"},"OutputFeedDeleteRequest":{"properties":{"confirm_name":{"type":"string","maxLength":200,"minLength":1,"title":"Confirm Name"}},"type":"object","required":["confirm_name"],"title":"OutputFeedDeleteRequest","description":"Deleting a feed breaks the URL a channel polls; the name is typed to confirm."},"OutputFeedOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"channel":{"type":"string","title":"Channel"},"format":{"type":"string","title":"Format"},"status":{"type":"string","title":"Status"},"filter_document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter Document"},"product_set_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Set Id"},"product_set_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Set Name"},"active_mapping_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Active Mapping Version Id"},"schedule_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Schedule Minutes"},"refresh_after_import":{"type":"boolean","title":"Refresh After Import"},"public_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Token"},"public_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Url"},"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"last_export_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Last Export Id"},"template_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Template Id"},"creative_format":{"type":"string","title":"Creative Format","default":"1:1"},"experiment_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Experiment Id"},"creative_profile":{"type":"string","title":"Creative Profile","default":"designed"},"lifestyle_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lifestyle Format"},"all_formats":{"type":"boolean","title":"All Formats","default":false},"all_sources":{"type":"boolean","title":"All Sources","default":true},"source_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Source Ids"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","channel","format","status","filter_document","active_mapping_version_id","schedule_minutes","refresh_after_import","public_token","settings","last_export_id","created_at","updated_at"],"title":"OutputFeedOut"},"OutputFeedStatus":{"type":"string","enum":["active","paused"],"title":"OutputFeedStatus"},"OutputFeedUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"filter_document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter Document"},"product_set_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Set Id"},"schedule_minutes":{"anyOf":[{"type":"integer","maximum":10080.0,"minimum":5.0},{"type":"null"}],"title":"Schedule Minutes"},"refresh_after_import":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Refresh After Import"},"status":{"anyOf":[{"$ref":"#/components/schemas/OutputFeedStatus"},{"type":"null"}]},"settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Settings"},"template_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Template Id"},"creative_format":{"anyOf":[{"type":"string","pattern":"^(1:1|4:5|9:16)$"},{"type":"null"}],"title":"Creative Format"},"experiment_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Experiment Id"},"creative_profile":{"anyOf":[{"type":"string","enum":["designed","clean"]},{"type":"null"}],"title":"Creative Profile"},"lifestyle_format":{"anyOf":[{"type":"string","enum":["1:1","4:5"]},{"type":"null"}],"title":"Lifestyle Format"},"source_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":200},{"type":"null"}],"title":"Source Ids"},"all_formats":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"All Formats"}},"additionalProperties":false,"type":"object","title":"OutputFeedUpdate","description":"Partial update. Send ``null`` to clear a nullable field; omit to keep it."},"OutputMappingCreate":{"properties":{"document":{"additionalProperties":true,"type":"object","title":"Document"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"activate":{"type":"boolean","title":"Activate","default":true}},"type":"object","required":["document"],"title":"OutputMappingCreate"},"OutputMappingVersionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"output_feed_id":{"type":"string","format":"uuid","title":"Output Feed Id"},"version":{"type":"integer","title":"Version"},"document":{"additionalProperties":true,"type":"object","title":"Document"},"document_hash":{"type":"string","title":"Document Hash"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","output_feed_id","version","document","document_hash","notes","created_at"],"title":"OutputMappingVersionOut"},"Page_ProductListItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ProductListItem"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"has_more":{"type":"boolean","title":"Has More","default":false},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"},"total_more":{"type":"boolean","title":"Total More","default":false}},"type":"object","required":["items"],"title":"Page[ProductListItem]"},"PermissionOut":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"required":{"type":"boolean","title":"Required"},"granted":{"type":"boolean","title":"Granted"}},"type":"object","required":["key","label","required","granted"],"title":"PermissionOut","description":"One permission a connector asks for, and whether the connection was granted it."},"PictureKind":{"type":"string","enum":["product","lifestyle"],"title":"PictureKind","description":"What a picture is (decision 203): a product photo is cut out, a lifestyle one is not."},"PictureKindSource":{"type":"string","enum":["auto","person"],"title":"PictureKindSource","description":"Who sorted a picture: sorting again never overrules a person."},"PresenceChangesOut":{"properties":{"by":{"type":"string","format":"uuid","title":"By"},"by_name":{"type":"string","title":"By Name"},"agent":{"type":"boolean","title":"Agent"},"layers":{"items":{"type":"string"},"type":"array","title":"Layers"},"revision":{"type":"integer","title":"Revision"},"at":{"type":"string","format":"date-time","title":"At"}},"type":"object","required":["by","by_name","agent","layers","revision","at"],"title":"PresenceChangesOut","description":"The last batch of operations on the template (decision 196): who, and which layers."},"PresenceEditorOut":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"name":{"type":"string","title":"Name"},"seen_at":{"type":"string","format":"date-time","title":"Seen At"},"agent":{"type":"boolean","title":"Agent","default":false}},"type":"object","required":["user_id","name","seen_at"],"title":"PresenceEditorOut"},"PreviewOut":{"properties":{"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"items":{"items":{"$ref":"#/components/schemas/PreviewRow"},"type":"array","title":"Items"},"writable":{"type":"integer","title":"Writable"}},"type":"object","required":["columns","items","writable"],"title":"PreviewOut"},"PreviewRequest":{"properties":{"document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document"},"filter_document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter Document"},"rule_set_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Rule Set Ids"},"product_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":20}},"type":"object","title":"PreviewRequest","description":"Preview with the active documents, or try edits before saving them."},"PreviewRow":{"properties":{"product_id":{"type":"string","format":"uuid","title":"Product Id"},"external_id":{"type":"string","title":"External Id"},"included":{"type":"boolean","title":"Included"},"row":{"additionalProperties":true,"type":"object","title":"Row"},"computed":{"additionalProperties":true,"type":"object","title":"Computed"},"fired_rules":{"items":{"type":"string"},"type":"array","title":"Fired Rules"},"errors":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Errors"},"warnings":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Warnings"}},"type":"object","required":["product_id","external_id","included","row","computed","fired_rules","errors","warnings"],"title":"PreviewRow"},"ProductChangeOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"import_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Import Id"},"kind":{"type":"string","title":"Kind"},"diff":{"additionalProperties":true,"type":"object","title":"Diff"},"previous_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous Hash"},"new_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Hash"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","import_id","kind","diff","previous_hash","new_hash","created_at"],"title":"ProductChangeOut"},"ProductCheckOut":{"properties":{"product_id":{"type":"string","format":"uuid","title":"Product Id"},"external_id":{"type":"string","title":"External Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"thumbnail_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Path"},"formats":{"additionalProperties":{"items":{"$ref":"#/components/schemas/CheckFindingOut"},"type":"array"},"type":"object","title":"Formats"}},"type":"object","required":["product_id","external_id","title","formats"],"title":"ProductCheckOut"},"ProductDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"source_id":{"type":"string","format":"uuid","title":"Source Id"},"source_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Name"},"external_id":{"type":"string","title":"External Id"},"item_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Group Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"gtin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gtin"},"mpn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mpn"},"availability":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Availability"},"condition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition"},"price_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Price Amount"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"sale_price_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Sale Price Amount"},"product_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Url"},"product_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Type"},"google_product_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Product Category"},"attributes":{"additionalProperties":true,"type":"object","title":"Attributes"},"canonical_hash":{"type":"string","title":"Canonical Hash"},"last_import_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Last Import Id"},"first_seen_at":{"type":"string","format":"date-time","title":"First Seen At"},"last_seen_at":{"type":"string","format":"date-time","title":"Last Seen At"},"is_active":{"type":"boolean","title":"Is Active"},"images":{"items":{"$ref":"#/components/schemas/ProductImageOut"},"type":"array","title":"Images","default":[]},"source_items":{"items":{"$ref":"#/components/schemas/SourceItemOut"},"type":"array","title":"Source Items","default":[]},"variant_count":{"type":"integer","title":"Variant Count","default":0},"mapping_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Mapping Version Id"},"product_sets":{"items":{"$ref":"#/components/schemas/ProductSetRef"},"type":"array","title":"Product Sets","default":[]}},"type":"object","required":["id","source_id","external_id","item_group_id","title","description","brand","gtin","mpn","availability","condition","price_amount","currency","sale_price_amount","product_url","product_type","google_product_category","attributes","canonical_hash","last_import_id","first_seen_at","last_seen_at","is_active"],"title":"ProductDetail"},"ProductImageOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"source_url":{"type":"string","title":"Source Url"},"position":{"type":"integer","title":"Position"},"processing_status":{"type":"string","title":"Processing Status"},"processing_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Processing Error"},"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width"},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","source_url","position","processing_status","width","height","mime_type","is_active"],"title":"ProductImageOut"},"ProductListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"source_id":{"type":"string","format":"uuid","title":"Source Id"},"source_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Name"},"external_id":{"type":"string","title":"External Id"},"item_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Group Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"availability":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Availability"},"price_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Price Amount"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"sale_price_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Sale Price Amount"},"is_active":{"type":"boolean","title":"Is Active"},"last_seen_at":{"type":"string","format":"date-time","title":"Last Seen At"},"primary_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Image Url"},"thumbnail_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Path"},"variant_count":{"type":"integer","title":"Variant Count","default":0}},"type":"object","required":["id","source_id","external_id","item_group_id","title","brand","availability","price_amount","currency","sale_price_amount","is_active","last_seen_at"],"title":"ProductListItem"},"ProductSentOut":{"properties":{"template_id":{"type":"string","format":"uuid","title":"Template Id"},"targets":{"items":{"$ref":"#/components/schemas/SentTargetOut"},"type":"array","title":"Targets"}},"type":"object","required":["template_id","targets"],"title":"ProductSentOut","description":"What the active output feeds send of one template for a product (decision 137)."},"ProductSetCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"filter":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter"},"source_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":200},{"type":"null"}],"title":"Source Ids"}},"type":"object","required":["name"],"title":"ProductSetCreate"},"ProductSetFeedUse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"channel":{"type":"string","title":"Channel"}},"type":"object","required":["id","name","channel"],"title":"ProductSetFeedUse","description":"An output feed that sends the set (``output_feeds.product_set_id``)."},"ProductSetOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"filter":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter"},"all_sources":{"type":"boolean","title":"All Sources","default":true},"source_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Source Ids"},"product_count":{"type":"integer","title":"Product Count"},"used_by":{"$ref":"#/components/schemas/ProductSetUsage"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","notes","filter","product_count","created_at","updated_at"],"title":"ProductSetOut"},"ProductSetPreviewOut":{"properties":{"count":{"type":"integer","title":"Count"},"total":{"type":"integer","title":"Total"},"truncated":{"type":"boolean","title":"Truncated"},"sample":{"items":{"$ref":"#/components/schemas/ProductSetSampleItem"},"type":"array","title":"Sample"}},"type":"object","required":["count","total","truncated","sample"],"title":"ProductSetPreviewOut"},"ProductSetPreviewRequest":{"properties":{"filter":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":12},"source_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":200},{"type":"null"}],"title":"Source Ids"}},"type":"object","title":"ProductSetPreviewRequest"},"ProductSetRef":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"ProductSetRef","description":"A set a product is in: enough to name it and link to it."},"ProductSetSampleItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"external_id":{"type":"string","title":"External Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"price_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Price Amount"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"availability":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Availability"},"thumbnail_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Path"}},"type":"object","required":["id","external_id","title","brand","price_amount","currency","availability"],"title":"ProductSetSampleItem"},"ProductSetTemplateChoice":{"properties":{"output_feed_id":{"type":"string","format":"uuid","title":"Output Feed Id"},"output_feed_name":{"type":"string","title":"Output Feed Name"},"template_id":{"type":"string","format":"uuid","title":"Template Id"},"template_name":{"type":"string","title":"Template Name"},"position":{"type":"integer","title":"Position"},"creative_format":{"type":"string","title":"Creative Format"}},"type":"object","required":["output_feed_id","output_feed_name","template_id","template_name","position","creative_format"],"title":"ProductSetTemplateChoice","description":"A template choice on an output feed that picks a template for the set."},"ProductSetUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"filter":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter"},"source_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":200},{"type":"null"}],"title":"Source Ids"}},"additionalProperties":false,"type":"object","title":"ProductSetUpdate","description":"Partial update. Send ``null`` to clear notes or the filter; omit to keep."},"ProductSetUsage":{"properties":{"output_feeds":{"items":{"$ref":"#/components/schemas/ProductSetFeedUse"},"type":"array","title":"Output Feeds"},"template_choices":{"items":{"$ref":"#/components/schemas/ProductSetTemplateChoice"},"type":"array","title":"Template Choices"}},"type":"object","title":"ProductSetUsage","description":"Where a set is used, by name, so a page can link to each place."},"PublishFeedOut":{"properties":{"channel":{"type":"string","title":"Channel"},"external_feed_id":{"type":"string","title":"External Feed Id"},"url":{"type":"string","title":"Url"},"interval":{"type":"string","title":"Interval"}},"type":"object","required":["channel","external_feed_id","url","interval"],"title":"PublishFeedOut"},"QuicklookOut":{"properties":{"product_id":{"type":"string","format":"uuid","title":"Product Id"},"external_id":{"type":"string","title":"External Id"},"asset":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Asset"},"computed":{"additionalProperties":true,"type":"object","title":"Computed"},"fired_rules":{"items":{"type":"string"},"type":"array","title":"Fired Rules"},"rule_warnings":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Rule Warnings"},"feeds":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Feeds"}},"type":"object","required":["product_id","external_id","computed","fired_rules","rule_warnings","feeds"],"title":"QuicklookOut"},"RenderDeleteOut":{"properties":{"renders":{"type":"integer","title":"Renders"},"files":{"type":"integer","title":"Files"}},"type":"object","required":["renders","files"],"title":"RenderDeleteOut","description":"What a delete removed. ``files`` trails ``renders`` when a render never\nproduced one (pending or failed) or its file is shared."},"RenderOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"template_id":{"type":"string","format":"uuid","title":"Template Id"},"template_version_id":{"type":"string","format":"uuid","title":"Template Version Id"},"product_id":{"type":"string","format":"uuid","title":"Product Id"},"format":{"type":"string","title":"Format"},"variant":{"type":"string","title":"Variant","default":"default"},"profile":{"type":"string","title":"Profile","default":"designed"},"output":{"type":"string","title":"Output"},"cache_key":{"type":"string","title":"Cache Key"},"status":{"type":"string","title":"Status"},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width"},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height"},"byte_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Byte Size"},"warnings":{"items":{},"type":"array","title":"Warnings"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"rendered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Rendered At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"changes_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Changes At"},"is_current":{"type":"boolean","title":"Is Current","default":false}},"type":"object","required":["id","template_id","template_version_id","product_id","format","output","cache_key","status","width","height","byte_size","warnings","error_message","rendered_at","created_at"],"title":"RenderOut"},"RenderRunOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"template_id":{"type":"string","format":"uuid","title":"Template Id"},"template_version_id":{"type":"string","format":"uuid","title":"Template Version Id"},"formats":{"items":{},"type":"array","title":"Formats"},"variants":{"items":{},"type":"array","title":"Variants"},"clean_formats":{"items":{},"type":"array","title":"Clean Formats"},"lifestyle_formats":{"items":{},"type":"array","title":"Lifestyle Formats"},"scope":{"type":"string","title":"Scope","default":"all"},"only_formats":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Only Formats"},"output":{"type":"string","title":"Output"},"trigger":{"type":"string","title":"Trigger"},"status":{"type":"string","title":"Status"},"items_selected":{"type":"integer","title":"Items Selected"},"items_rendered":{"type":"integer","title":"Items Rendered"},"items_cached":{"type":"integer","title":"Items Cached"},"items_failed":{"type":"integer","title":"Items Failed"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"stats":{"additionalProperties":true,"type":"object","title":"Stats"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","template_id","template_version_id","formats","output","trigger","status","items_selected","items_rendered","items_cached","items_failed","error_message","stats","started_at","finished_at","created_at"],"title":"RenderRunOut"},"RenderRunRequest":{"properties":{"formats":{"items":{"type":"string"},"type":"array","title":"Formats"},"output":{"type":"string","pattern":"^(png|jpeg|webp)$","title":"Output","default":"png"},"variants":{"items":{"type":"string"},"type":"array","title":"Variants"},"clean_formats":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Clean Formats"},"scope":{"$ref":"#/components/schemas/RenderScope","default":"all"},"lifestyle_formats":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lifestyle Formats"}},"type":"object","title":"RenderRunRequest"},"RenderScope":{"type":"string","enum":["all","sent"],"title":"RenderScope","description":"Which products a render run makes creatives for (decision 127).\n\n``all`` is every active product, in every format and variant the run\nnames. ``sent`` is what the output feeds send with the template: per\nproduct, only the formats, variants and pictures some active feed\npublishes for it."},"ReprocessChoice":{"properties":{"asset_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":20000,"minItems":1},{"type":"null"}],"title":"Asset Ids"}},"type":"object","title":"ReprocessChoice","description":"Decision 256: the pictures ``POST …/assets/reprocess?scope=review`` cuts out with the\nreview model, in place of the Needs review list — the ones a person selected.\n\nAn empty body (``{}``, which the portal sends with every POST) chooses no\npictures: the request takes its scope's own list."},"ResolvedFontOut":{"properties":{"key":{"type":"string","title":"Key"},"family":{"type":"string","title":"Family"},"weight":{"type":"integer","title":"Weight"},"style":{"type":"string","title":"Style"},"render_family":{"type":"string","title":"Render Family"},"char_width":{"type":"number","title":"Char Width"},"coverage":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Coverage"},"source":{"type":"string","title":"Source"},"url":{"type":"string","title":"Url"}},"type":"object","required":["key","family","weight","style","render_family","char_width","source","url"],"title":"ResolvedFontOut","description":"The face a request resolved to. ``weight`` and ``style`` are the face's own."},"ReviewRequest":{"properties":{"status":{"$ref":"#/components/schemas/ReviewStatus"},"note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Note"}},"type":"object","required":["status"],"title":"ReviewRequest"},"ReviewStatus":{"type":"string","enum":["pending_review","approved","rejected"],"title":"ReviewStatus"},"RoleUpdate":{"properties":{"role":{"$ref":"#/components/schemas/MembershipRole"}},"type":"object","required":["role"],"title":"RoleUpdate"},"RuleSetCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document"}},"type":"object","required":["name"],"title":"RuleSetCreate"},"RuleSetOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"active_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Active Version Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document"},"version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"},"used_by_templates":{"type":"integer","title":"Used By Templates","default":0},"used_by_archived_templates":{"type":"integer","title":"Used By Archived Templates","default":0},"used_by_output_feeds":{"type":"integer","title":"Used By Output Feeds","default":0}},"type":"object","required":["id","name","notes","active_version_id","created_at","updated_at"],"title":"RuleSetOut"},"RuleSetSelection":{"properties":{"rule_set_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"title":"Rule Set Ids"}},"type":"object","title":"RuleSetSelection","description":"Which sets a template or an output feed evaluates, in merge order."},"RuleSetUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","title":"RuleSetUpdate","description":"Name and notes only. The document changes by adding a version."},"RuleVersionCreate":{"properties":{"document":{"additionalProperties":true,"type":"object","title":"Document"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"activate":{"type":"boolean","title":"Activate","default":true}},"type":"object","required":["document"],"title":"RuleVersionCreate"},"RuleVersionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"rule_set_id":{"type":"string","format":"uuid","title":"Rule Set Id"},"version":{"type":"integer","title":"Version"},"document":{"additionalProperties":true,"type":"object","title":"Document"},"document_hash":{"type":"string","title":"Document Hash"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","rule_set_id","version","document","document_hash","notes","created_at"],"title":"RuleVersionOut"},"RunEventOut":{"properties":{"at":{"type":"string","format":"date-time","title":"At"},"level":{"type":"string","title":"Level"},"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"actor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor"},"data":{"additionalProperties":true,"type":"object","title":"Data"}},"type":"object","required":["at","level","code","message","actor","data"],"title":"RunEventOut","description":"One line of a run's log."},"SafeZoneOut":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"insets":{"additionalProperties":{"items":{"type":"number"},"type":"array"},"type":"object","title":"Insets"},"source":{"type":"string","title":"Source"},"verified":{"type":"string","title":"Verified"},"note":{"type":"string","title":"Note"}},"type":"object","required":["id","label","insets","source","verified","note"],"title":"SafeZoneOut","description":"Where a placement's own interface covers the picture (``core/creatives/qa.py``)."},"SentTargetOut":{"properties":{"format":{"type":"string","title":"Format"},"variant":{"type":"string","title":"Variant"},"picture":{"type":"string","title":"Picture"}},"type":"object","required":["format","variant","picture"],"title":"SentTargetOut","description":"One picture an output feed sends of a template for a product."},"ShopOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"connector":{"type":"string","title":"Connector"},"address":{"type":"string","title":"Address"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"type":"string","enum":["pending","connected","error","disconnected"],"title":"Status"},"status_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Reason"},"method":{"type":"string","enum":["oauth","approval","keys"],"title":"Method"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Connected At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"permissions":{"items":{"$ref":"#/components/schemas/PermissionOut"},"type":"array","title":"Permissions"},"missing":{"items":{"type":"string"},"type":"array","title":"Missing"},"sources":{"items":{"$ref":"#/components/schemas/SourceRefOut"},"type":"array","title":"Sources"}},"type":"object","required":["id","connector","address","status","method"],"title":"ShopOut","description":"A company's connection to one shop (design 15.0 §5). Never its credentials."},"ShopifySettingsIn":{"properties":{"shop_domain":{"type":"string","maxLength":500,"minLength":1,"title":"Shop Domain"},"include_unlisted":{"type":"boolean","title":"Include Unlisted","default":false},"only_online_store":{"type":"boolean","title":"Only Online Store","default":true}},"additionalProperties":false,"type":"object","required":["shop_domain"],"title":"ShopifySettingsIn","description":"A Shopify source's settings (design 14.0)."},"ShopifyShopIn":{"properties":{"shop":{"type":"string","maxLength":500,"minLength":1,"title":"Shop"},"return_to":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Return To"}},"additionalProperties":false,"type":"object","required":["shop"],"title":"ShopifyShopIn","description":"A Shopify shop to connect: its address as typed — ``my-shop``,\n``my-shop.myshopify.com``, a link into its admin (400\n``invalid-shop-domain`` for anything else)."},"ShopifySourceCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"currency":{"anyOf":[{"type":"string","maxLength":3,"minLength":3},{"type":"null"}],"title":"Currency"},"locale":{"anyOf":[{"type":"string","maxLength":10,"minLength":2},{"type":"null"}],"title":"Locale"},"missing_item_policy":{"$ref":"#/components/schemas/MissingItemPolicy","default":"deactivate"},"kind":{"type":"string","const":"shopify","title":"Kind"},"settings":{"$ref":"#/components/schemas/ShopifySettingsIn"}},"type":"object","required":["name","kind","settings"],"title":"ShopifySourceCreate","description":"A Shopify shop as a source: made as a draft, read every six hours, its\npreset mapping active. Its ``shop_domain`` names one of the company's shop\nconnections (design 15.0): connect the shop on Connectors first."},"SnapchatCatalogSettings":{"properties":{"organization_id":{"type":"string","pattern":"^[0-9a-fA-F][0-9a-fA-F-]{7,63}$","title":"Organization Id"},"catalog_id":{"type":"string","pattern":"^[0-9a-fA-F][0-9a-fA-F-]{7,63}$","title":"Catalog Id"},"catalog_name":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Catalog Name"},"product_set_id":{"anyOf":[{"type":"string","pattern":"^[0-9a-fA-F][0-9a-fA-F-]{7,63}$"},{"type":"null"}],"title":"Product Set Id"}},"additionalProperties":false,"type":"object","required":["organization_id","catalog_id"],"title":"SnapchatCatalogSettings","description":"A Snapchat catalog, in one of the organizations the company's Snapchat login belongs to."},"SnapchatSourceCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"currency":{"anyOf":[{"type":"string","maxLength":3,"minLength":3},{"type":"null"}],"title":"Currency"},"locale":{"anyOf":[{"type":"string","maxLength":10,"minLength":2},{"type":"null"}],"title":"Locale"},"missing_item_policy":{"$ref":"#/components/schemas/MissingItemPolicy","default":"deactivate"},"kind":{"type":"string","const":"snapchat","title":"Kind"},"settings":{"$ref":"#/components/schemas/SnapchatCatalogSettings"}},"type":"object","required":["name","kind","settings"],"title":"SnapchatSourceCreate","description":"A Snapchat catalog as a source (design 15.0), read through the company's\nSnapchat login."},"SourceDeleteRequest":{"properties":{"confirm_name":{"type":"string","maxLength":200,"minLength":1,"title":"Confirm Name"}},"type":"object","required":["confirm_name"],"title":"SourceDeleteRequest"},"SourceDeletionImpactOut":{"properties":{"source_id":{"type":"string","format":"uuid","title":"Source Id"},"source_name":{"type":"string","title":"Source Name"},"source_items":{"type":"integer","title":"Source Items"},"products":{"type":"integer","title":"Products"},"products_active":{"type":"integer","title":"Products Active"},"import_runs":{"type":"integer","title":"Import Runs"},"output_feeds_emptied":{"items":{"type":"string"},"type":"array","title":"Output Feeds Emptied"},"product_sets_emptied":{"items":{"type":"string"},"type":"array","title":"Product Sets Emptied"},"templates_emptied":{"items":{"type":"string"},"type":"array","title":"Templates Emptied"}},"type":"object","required":["source_id","source_name","source_items","products","products_active","import_runs"],"title":"SourceDeletionImpactOut","description":"What deleting a source takes with it (decision 201): its products go too."},"SourceItemOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"source_id":{"type":"string","format":"uuid","title":"Source Id"},"source_key":{"type":"string","title":"Source Key"},"source_hash":{"type":"string","title":"Source Hash"},"raw_payload":{"additionalProperties":true,"type":"object","title":"Raw Payload"},"first_seen_at":{"type":"string","format":"date-time","title":"First Seen At"},"last_seen_at":{"type":"string","format":"date-time","title":"Last Seen At"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","source_id","source_key","source_hash","raw_payload","first_seen_at","last_seen_at","is_active"],"title":"SourceItemOut"},"SourceOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind"},"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"currency":{"type":"string","title":"Currency"},"locale":{"type":"string","title":"Locale"},"category_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Source"},"missing_item_policy":{"type":"string","title":"Missing Item Policy"},"status":{"type":"string","title":"Status"},"active_mapping_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Active Mapping Version Id"},"schedule_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Schedule Minutes"},"import_scope":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Import Scope"},"products":{"type":"integer","title":"Products","default":0},"products_active":{"type":"integer","title":"Products Active","default":0},"connection":{"anyOf":[{"$ref":"#/components/schemas/ConnectionOut"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","kind","settings","currency","locale","missing_item_policy","status","active_mapping_version_id","created_at","updated_at"],"title":"SourceOut"},"SourceRefOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind"}},"type":"object","required":["id","name","kind"],"title":"SourceRefOut","description":"A source that reads through a connection."},"SourceUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"schedule_minutes":{"anyOf":[{"type":"integer","maximum":10080.0,"minimum":5.0},{"type":"null"}],"title":"Schedule Minutes"},"missing_item_policy":{"anyOf":[{"$ref":"#/components/schemas/MissingItemPolicy"},{"type":"null"}]},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"item_path":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Item Path"},"delimiter":{"anyOf":[{"type":"string","maxLength":1,"minLength":1},{"type":"null"}],"title":"Delimiter"},"encoding":{"anyOf":[{"type":"string","maxLength":32,"minLength":2},{"type":"null"}],"title":"Encoding"},"currency":{"anyOf":[{"type":"string","maxLength":3,"minLength":3},{"type":"null"}],"title":"Currency"},"locale":{"anyOf":[{"type":"string","maxLength":10,"minLength":2},{"type":"null"}],"title":"Locale"},"import_scope":{"anyOf":[{"$ref":"#/components/schemas/ImportScopeIn"},{"type":"null"}]},"include_unlisted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Unlisted"},"only_online_store":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Only Online Store"},"include_hidden":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Hidden"},"only_approved":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Only Approved"},"feed_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Feed Id"},"only_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Only Available"},"product_set_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Product Set Id"},"data_source_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Data Source Id"},"feed_label":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Feed Label"},"content_language":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Content Language"}},"additionalProperties":false,"type":"object","title":"SourceUpdate"},"StarterPreviewRequest":{"properties":{"starter":{"type":"string","maxLength":64,"minLength":1,"title":"Starter"},"product_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"},"format":{"type":"string","title":"Format","default":"1:1"}},"type":"object","required":["starter"],"title":"StarterPreviewRequest","description":"Preview a starter before it is a template, so the chooser can show it."},"StoreConnectOut":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"shop":{"$ref":"#/components/schemas/ShopOut"}},"type":"object","required":["shop"],"title":"StoreConnectOut","description":"A store being connected: its approval page (``url``; null for keys, which\nare read with at once) and the connection as it stands."},"TaxonomyCategoryOut":{"properties":{"id":{"type":"integer","title":"Id"},"path":{"type":"string","title":"Path"},"name":{"type":"string","title":"Name"},"depth":{"type":"integer","title":"Depth"}},"type":"object","required":["id","path","name","depth"],"title":"TaxonomyCategoryOut","description":"One category of a channel's published taxonomy."},"TaxonomySearchOut":{"properties":{"version":{"type":"string","title":"Version"},"items":{"items":{"$ref":"#/components/schemas/TaxonomyCategoryOut"},"type":"array","title":"Items"}},"type":"object","required":["version","items"],"title":"TaxonomySearchOut"},"TemplateCheckPageOut":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ProductCheckOut"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","next_cursor","total"],"title":"TemplateCheckPageOut"},"TemplateCheckRequest":{"properties":{"document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document"},"formats":{"items":{"type":"string"},"type":"array","maxItems":3,"minItems":1,"title":"Formats"},"zones":{"items":{"type":"string"},"type":"array","maxItems":8,"title":"Zones"},"product_set_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Set Id"},"cursor":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Cursor"},"product_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50},{"type":"null"}],"title":"Product Ids"},"limit":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Limit","default":25},"variant":{"type":"string","maxLength":64,"title":"Variant","default":"default"}},"type":"object","title":"TemplateCheckRequest","description":"One page of the editor's product checks: the draft, and which products."},"TemplateCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"starter":{"type":"string","title":"Starter","default":"product_card"},"document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document"},"source_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":200},{"type":"null"}],"title":"Source Ids"},"publish":{"type":"boolean","title":"Publish","default":true}},"type":"object","required":["name"],"title":"TemplateCreate"},"TemplateDeleteRequest":{"properties":{"confirm_name":{"type":"string","maxLength":200,"minLength":1,"title":"Confirm Name"}},"type":"object","required":["confirm_name"],"title":"TemplateDeleteRequest","description":"The template's exact name, typed to confirm deleting it."},"TemplateDesignIn":{"properties":{"picture":{"$ref":"#/components/schemas/DesignPictureIn"},"formats":{"anyOf":[{"items":{"type":"string","enum":["1:1","4:5","9:16"]},"type":"array","minItems":1},{"type":"null"}],"title":"Formats"},"background":{"anyOf":[{"$ref":"#/components/schemas/DesignBackgroundIn"},{"type":"null"}]},"parts":{"items":{"$ref":"#/components/schemas/DesignPartIn"},"type":"array","maxItems":40,"minItems":1,"title":"Parts"},"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","required":["parts"],"title":"TemplateDesignIn","description":"A design laid out on a picture, to be made a template (decision 242)."},"TemplateDesignOut":{"properties":{"document":{"additionalProperties":true,"type":"object","title":"Document"},"layers":{"items":{"type":"string"},"type":"array","title":"Layers"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"}},"type":"object","required":["document","layers"],"title":"TemplateDesignOut","description":"The design as a template document, in the brand; nothing is saved."},"TemplateDraftOut":{"properties":{"document":{"additionalProperties":true,"type":"object","title":"Document"},"revision":{"type":"integer","title":"Revision"},"base_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Base Version Id"},"updated_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Updated By"},"updated_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Name"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["document","revision","base_version_id","updated_by","updated_by_name","updated_at"],"title":"TemplateDraftOut","description":"A template's working copy (decision 123): saved as it goes, never rendered."},"TemplateDraftSave":{"properties":{"document":{"additionalProperties":true,"type":"object","title":"Document"},"revision":{"type":"integer","minimum":0.0,"title":"Revision"},"base_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Base Version Id"},"force":{"type":"boolean","title":"Force","default":false}},"type":"object","required":["document","revision"],"title":"TemplateDraftSave"},"TemplateDraftSavedOut":{"properties":{"revision":{"type":"integer","title":"Revision"},"draft":{"type":"boolean","title":"Draft"},"base_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Base Version Id"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"behind":{"type":"boolean","title":"Behind"}},"type":"object","required":["revision","draft","base_version_id","updated_at","behind"],"title":"TemplateDraftSavedOut"},"TemplateFeedUseOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"channel":{"type":"string","title":"Channel"},"creative_profile":{"type":"string","title":"Creative Profile","default":"designed"},"creative_format":{"type":"string","title":"Creative Format","default":"1:1"},"lifestyle_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lifestyle Format"},"all_formats":{"type":"boolean","title":"All Formats","default":false}},"type":"object","required":["id","name","channel"],"title":"TemplateFeedUseOut"},"TemplateOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"active_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Active Version Id"},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Archived At"},"auto_render":{"type":"boolean","title":"Auto Render","default":false},"needs_render_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Needs Render Since"},"all_sources":{"type":"boolean","title":"All Sources","default":true},"source_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Source Ids"},"draft_saved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Draft Saved At"},"editor_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Editor Url"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"renders_purge_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Renders Purge At","description":"When this archived template's renders are deleted; null if active.\n\nDerived rather than stored, and derived *here* rather than in the\nportal, so the countdown the operator reads comes from the same\nretention setting the sweep obeys. A client that computed it from its\nown idea of \"30 days\" would go quietly wrong the day that setting\nchanged.","readOnly":true}},"type":"object","required":["id","name","status","active_version_id","created_at","updated_at","renders_purge_at"],"title":"TemplateOut"},"TemplatePresenceOut":{"properties":{"editors":{"items":{"$ref":"#/components/schemas/PresenceEditorOut"},"type":"array","title":"Editors"},"draft_revision":{"type":"integer","title":"Draft Revision"},"draft_saved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Draft Saved At"},"draft_saved_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Draft Saved By"},"draft_saved_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Draft Saved By Name"},"active_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Active Version Id"},"changes":{"anyOf":[{"$ref":"#/components/schemas/PresenceChangesOut"},{"type":"null"}]}},"type":"object","required":["editors","draft_revision","draft_saved_at","draft_saved_by","draft_saved_by_name","active_version_id"],"title":"TemplatePresenceOut","description":"Who else has the template open, and the draft and version as the server has them."},"TemplatePreviewItemOut":{"properties":{"product_id":{"type":"string","format":"uuid","title":"Product Id"},"external_id":{"type":"string","title":"External Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"svg":{"type":"string","title":"Svg"},"problems":{"type":"integer","title":"Problems"}},"type":"object","required":["product_id","external_id","title","svg","problems"],"title":"TemplatePreviewItemOut"},"TemplatePreviewOut":{"properties":{"product_id":{"type":"string","format":"uuid","title":"Product Id"},"external_id":{"type":"string","title":"External Id"},"format":{"type":"string","title":"Format"},"svg":{"type":"string","title":"Svg"},"warnings":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Warnings"},"bound":{"additionalProperties":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"boolean"},{"type":"integer"},{"type":"number"},{"type":"null"}]},"type":"object"},"type":"object","title":"Bound"},"visibility":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Visibility"},"subject_boxes":{"additionalProperties":{"additionalProperties":{"type":"number"},"type":"object"},"type":"object","title":"Subject Boxes","default":{}},"pictures":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Pictures","default":{}},"overrides":{"additionalProperties":{"type":"integer"},"type":"object","title":"Overrides","default":{}},"conditions":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Conditions","default":{}},"parts":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Parts","default":{}},"picture_findings":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Picture Findings","default":[]},"touchups":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Touchups","default":{}},"codes":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Codes","default":{}},"tables":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"null"}]},"type":"object","title":"Tables","default":{}},"layout":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layout"},"explain":{"additionalProperties":true,"type":"object","title":"Explain","default":{}}},"type":"object","required":["product_id","external_id","format","svg","warnings","bound","visibility"],"title":"TemplatePreviewOut"},"TemplatePreviewRequest":{"properties":{"document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document"},"product_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Id"},"format":{"type":"string","title":"Format","default":"1:1"},"variant":{"type":"string","maxLength":64,"title":"Variant","default":"default"},"profile":{"$ref":"#/components/schemas/CreativeProfile","default":"designed"}},"type":"object","title":"TemplatePreviewRequest"},"TemplatePreviewsOut":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TemplatePreviewItemOut"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"TemplatePreviewsOut"},"TemplatePreviewsRequest":{"properties":{"document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document"},"product_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":12,"minItems":1,"title":"Product Ids"},"format":{"type":"string","title":"Format","default":"1:1"},"variant":{"type":"string","maxLength":64,"title":"Variant","default":"default"}},"type":"object","required":["product_ids"],"title":"TemplatePreviewsRequest","description":"The draft for several products at once: the editor's grid (decision 165)."},"TemplatePublishRequest":{"properties":{"revision":{"type":"integer","minimum":1.0,"title":"Revision"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"force":{"type":"boolean","title":"Force","default":false}},"type":"object","required":["revision"],"title":"TemplatePublishRequest"},"TemplateRuleIn":{"properties":{"product_set_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Set Id"},"template_id":{"type":"string","format":"uuid","title":"Template Id"},"creative_format":{"type":"string","pattern":"^(1:1|4:5|9:16)$","title":"Creative Format","default":"1:1"}},"type":"object","required":["template_id"],"title":"TemplateRuleIn"},"TemplateRuleOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"position":{"type":"integer","title":"Position"},"product_set_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Product Set Id"},"product_set_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Set Name"},"template_id":{"type":"string","format":"uuid","title":"Template Id"},"template_name":{"type":"string","title":"Template Name"},"creative_format":{"type":"string","title":"Creative Format"}},"type":"object","required":["id","position","product_set_id","product_set_name","template_id","template_name","creative_format"],"title":"TemplateRuleOut"},"TemplateSentOut":{"properties":{"products":{"type":"integer","title":"Products"},"creatives":{"type":"integer","title":"Creatives"},"clean_images":{"type":"integer","title":"Clean Images"},"lifestyle_images":{"type":"integer","title":"Lifestyle Images","default":0},"formats":{"additionalProperties":{"type":"integer"},"type":"object","title":"Formats"},"estimated":{"type":"boolean","title":"Estimated","default":false}},"type":"object","required":["products","creatives","clean_images"],"title":"TemplateSentOut","description":"What the output feeds send with a template, counted product by product (decision 127)."},"TemplateSheetRequest":{"properties":{"document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document"},"product_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":6,"minItems":1},{"type":"null"}],"title":"Product Ids"},"formats":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":3,"minItems":1},{"type":"null"}],"title":"Formats"},"variant":{"type":"string","maxLength":64,"title":"Variant","default":"default"},"side":{"type":"integer","maximum":2000.0,"minimum":480.0,"title":"Side","default":1200}},"type":"object","title":"TemplateSheetRequest","description":"A contact sheet (decision 195): the draft — or ``document`` — drawn for a few\nproducts in its formats, on one PNG no longer than ``side`` either way."},"TemplateStatus":{"type":"string","enum":["active","archived"],"title":"TemplateStatus"},"TemplateUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"$ref":"#/components/schemas/TemplateStatus"},{"type":"null"}]},"auto_render":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Render"},"source_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":200},{"type":"null"}],"title":"Source Ids"}},"additionalProperties":false,"type":"object","title":"TemplateUpdate"},"TemplateUsageOut":{"properties":{"output_feeds":{"items":{"$ref":"#/components/schemas/TemplateFeedUseOut"},"type":"array","title":"Output Feeds"},"auto_render":{"type":"boolean","title":"Auto Render"},"formats_in_use":{"items":{"type":"string"},"type":"array","title":"Formats In Use"},"variants_in_use":{"items":{"type":"string"},"type":"array","title":"Variants In Use"},"clean_formats_in_use":{"items":{"type":"string"},"type":"array","title":"Clean Formats In Use"},"lifestyle_formats_in_use":{"items":{"type":"string"},"type":"array","title":"Lifestyle Formats In Use"},"active_products":{"type":"integer","title":"Active Products"},"sent":{"anyOf":[{"$ref":"#/components/schemas/TemplateSentOut"},{"type":"null"}]}},"type":"object","required":["output_feeds","auto_render","formats_in_use","variants_in_use","active_products"],"title":"TemplateUsageOut","description":"What publishing a template reaches: the feeds that send its creatives, and how many."},"TemplateVersionCreate":{"properties":{"document":{"additionalProperties":true,"type":"object","title":"Document"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"activate":{"type":"boolean","title":"Activate","default":true}},"type":"object","required":["document"],"title":"TemplateVersionCreate"},"TemplateVersionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"template_id":{"type":"string","format":"uuid","title":"Template Id"},"version":{"type":"integer","title":"Version"},"document":{"additionalProperties":true,"type":"object","title":"Document"},"document_hash":{"type":"string","title":"Document Hash"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"created_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","template_id","version","document","document_hash","notes","created_at"],"title":"TemplateVersionOut"},"TestImportRequest":{"properties":{"document":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document"},"import_scope":{"anyOf":[{"$ref":"#/components/schemas/ImportScopeIn"},{"type":"null"}]}},"type":"object","title":"TestImportRequest"},"ThemeCreate":{"properties":{"colors":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Colors"},"fonts":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Fonts"},"wording":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Wording"},"spacing":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Spacing"},"radii":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Radii"},"styles":{"anyOf":[{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object"},{"type":"null"}],"title":"Styles"},"name":{"type":"string","maxLength":200,"title":"Name"}},"additionalProperties":false,"type":"object","required":["name"],"title":"ThemeCreate"},"ThemeOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"colors":{"additionalProperties":{"type":"string"},"type":"object","title":"Colors"},"fonts":{"additionalProperties":{"type":"string"},"type":"object","title":"Fonts"},"wording":{"additionalProperties":{"type":"string"},"type":"object","title":"Wording"},"spacing":{"additionalProperties":{"type":"integer"},"type":"object","title":"Spacing"},"radii":{"additionalProperties":{"type":"integer"},"type":"object","title":"Radii"},"styles":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Styles"},"windows":{"type":"integer","title":"Windows"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","colors","fonts","wording","spacing","radii","styles","windows","created_at","updated_at"],"title":"ThemeOut","description":"A theme: what it changes, section by section, and how many windows switch it on."},"ThemeUpdate":{"properties":{"colors":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Colors"},"fonts":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Fonts"},"wording":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Wording"},"spacing":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Spacing"},"radii":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Radii"},"styles":{"anyOf":[{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object"},{"type":"null"}],"title":"Styles"},"name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Name"}},"additionalProperties":false,"type":"object","title":"ThemeUpdate","description":"A new name, or sections: each section given replaces the theme's own,\nso a change can be taken back; a section left out stays as it is."},"ThemeWindowCreate":{"properties":{"theme_id":{"type":"string","format":"uuid","title":"Theme Id"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"}},"additionalProperties":false,"type":"object","required":["theme_id"],"title":"ThemeWindowCreate","description":"A window in which the company draws with a theme; either end may be left open."},"ThemeWindowOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"theme_id":{"type":"string","format":"uuid","title":"Theme Id"},"theme_name":{"type":"string","title":"Theme Name"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"state":{"type":"string","enum":["on","later","over"],"title":"State"}},"type":"object","required":["id","theme_id","theme_name","starts_at","ends_at","state"],"title":"ThemeWindowOut"},"ThemeWindowsOut":{"properties":{"windows":{"items":{"$ref":"#/components/schemas/ThemeWindowOut"},"type":"array","title":"Windows"},"active":{"anyOf":[{"$ref":"#/components/schemas/ThemeOut"},{"type":"null"}]}},"type":"object","required":["windows","active"],"title":"ThemeWindowsOut","description":"The company's windows, the first to start first, and the theme on now."},"TikTokCatalogSettings":{"properties":{"bc_id":{"type":"string","pattern":"^[0-9]{1,32}$","title":"Bc Id"},"catalog_id":{"type":"string","pattern":"^[0-9]{1,32}$","title":"Catalog Id"},"catalog_name":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Catalog Name"},"only_available":{"type":"boolean","title":"Only Available","default":false}},"additionalProperties":false,"type":"object","required":["bc_id","catalog_id"],"title":"TikTokCatalogSettings","description":"A TikTok catalog — it belongs to a Business Center — read through the\ncompany's TikTok login."},"TikTokSourceCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"currency":{"anyOf":[{"type":"string","maxLength":3,"minLength":3},{"type":"null"}],"title":"Currency"},"locale":{"anyOf":[{"type":"string","maxLength":10,"minLength":2},{"type":"null"}],"title":"Locale"},"missing_item_policy":{"$ref":"#/components/schemas/MissingItemPolicy","default":"deactivate"},"kind":{"type":"string","const":"tiktok","title":"Kind"},"settings":{"$ref":"#/components/schemas/TikTokCatalogSettings"}},"type":"object","required":["name","kind","settings"],"title":"TikTokSourceCreate","description":"A TikTok catalog as a source (design 15.0), read through the company's TikTok login."},"TouchupOut":{"properties":{"product_id":{"type":"string","format":"uuid","title":"Product Id"},"external_id":{"type":"string","title":"External Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"layer_id":{"type":"string","title":"Layer Id"},"format":{"type":"string","title":"Format"},"props":{"additionalProperties":true,"type":"object","title":"Props"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["product_id","external_id","title","layer_id","format","props","updated_at"],"title":"TouchupOut"},"TouchupSave":{"properties":{"product_id":{"type":"string","format":"uuid","title":"Product Id"},"layer_id":{"type":"string","maxLength":64,"minLength":1,"title":"Layer Id"},"format":{"type":"string","title":"Format"},"props":{"additionalProperties":true,"type":"object","title":"Props"}},"type":"object","required":["product_id","layer_id","format"],"title":"TouchupSave","description":"One product's touch-up of one picture in one format (decision 164)."},"UnavailableFontOut":{"properties":{"key":{"type":"string","title":"Key"},"message":{"type":"string","title":"Message"}},"type":"object","required":["key","message"],"title":"UnavailableFontOut"},"UploadOut":{"properties":{"source_id":{"type":"string","format":"uuid","title":"Source Id"},"original_filename":{"type":"string","title":"Original Filename"},"byte_size":{"type":"integer","title":"Byte Size"},"sha256":{"type":"string","title":"Sha256"}},"type":"object","required":["source_id","original_filename","byte_size","sha256"],"title":"UploadOut"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebsiteLookOut":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"look":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Look"},"read_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Read At"},"fonts_in_zalia":{"items":{"type":"string"},"type":"array","title":"Fonts In Zalia","default":[]}},"type":"object","required":["url","look","read_at"],"title":"WebsiteLookOut","description":"What Zalia read on the brand's website (decision 246), for a model designing a\ntemplate: its title and description, headings, calls to action, typefaces, colours,\npictures and the shapes of its buttons, corners and headings (decision 251). ``look``\nholds ``error`` when the site could not be read."},"WooCommerceKeysIn":{"properties":{"consumer_key":{"type":"string","maxLength":200,"minLength":4,"title":"Consumer Key"},"consumer_secret":{"type":"string","maxLength":200,"minLength":4,"title":"Consumer Secret"}},"additionalProperties":false,"type":"object","required":["consumer_key","consumer_secret"],"title":"WooCommerceKeysIn","description":"A WooCommerce REST API key made by hand: Settings → Advanced → REST API,\npermission Read."},"WooCommerceKeysPosted":{"properties":{"key_id":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Key Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"integer"}],"title":"User Id"},"consumer_key":{"type":"string","maxLength":200,"minLength":1,"title":"Consumer Key"},"consumer_secret":{"type":"string","maxLength":200,"minLength":1,"title":"Consumer Secret"},"key_permissions":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Key Permissions"}},"type":"object","required":["user_id","consumer_key","consumer_secret"],"title":"WooCommerceKeysPosted","description":"What a WooCommerce store posts once its owner approved Zalia."},"WooCommerceSettingsIn":{"properties":{"store_url":{"type":"string","maxLength":500,"minLength":1,"title":"Store Url"},"include_hidden":{"type":"boolean","title":"Include Hidden","default":false}},"additionalProperties":false,"type":"object","required":["store_url"],"title":"WooCommerceSettingsIn","description":"A WooCommerce source's settings (design 14.0)."},"WooCommerceSourceCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"currency":{"anyOf":[{"type":"string","maxLength":3,"minLength":3},{"type":"null"}],"title":"Currency"},"locale":{"anyOf":[{"type":"string","maxLength":10,"minLength":2},{"type":"null"}],"title":"Locale"},"missing_item_policy":{"$ref":"#/components/schemas/MissingItemPolicy","default":"deactivate"},"kind":{"type":"string","const":"woocommerce","title":"Kind"},"settings":{"$ref":"#/components/schemas/WooCommerceSettingsIn"}},"type":"object","required":["name","kind","settings"],"title":"WooCommerceSourceCreate","description":"A WooCommerce store as a source: made as a draft, read every six hours, its\npreset mapping active. Its ``store_url`` names one of the company's shop\nconnections (design 15.0): connect the store on Connectors first."},"WooCommerceStoreIn":{"properties":{"store_url":{"type":"string","maxLength":500,"minLength":1,"title":"Store Url"},"method":{"type":"string","enum":["approval","keys"],"title":"Method","default":"approval"},"consumer_key":{"anyOf":[{"type":"string","maxLength":200,"minLength":4},{"type":"null"}],"title":"Consumer Key"},"consumer_secret":{"anyOf":[{"type":"string","maxLength":200,"minLength":4},{"type":"null"}],"title":"Consumer Secret"},"return_to":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Return To"}},"additionalProperties":false,"type":"object","required":["store_url"],"title":"WooCommerceStoreIn","description":"A WooCommerce store to connect, over HTTPS: through its approval page\n(``approval``), or with a Read key made by hand (``keys``)."},"WorstCaseOut":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"detail":{"type":"string","title":"Detail"},"product":{"$ref":"#/components/schemas/ProductListItem"}},"type":"object","required":["key","label","detail","product"],"title":"WorstCaseOut","description":"One product a template has to survive, and why (``services/worst_cases.py``)."},"WorstCasesOut":{"properties":{"cases":{"items":{"$ref":"#/components/schemas/WorstCaseOut"},"type":"array","title":"Cases"}},"type":"object","required":["cases"],"title":"WorstCasesOut"}}}}