{"openapi":"3.0.3","info":{"title":"Sappo Merchant API","version":"1.0.0","description":"The your Sappo app API lets you read your own store's your Sappo app data from your\nown code: a spreadsheet sync, an internal dashboard, a warehouse system, or\nan AI assistant.\n\nIt is a JSON API over HTTPS. Every request is authenticated with a token\nyou create yourself inside the app, and every request only ever sees the\nstore that token belongs to \u2014 there is no way to ask for another store's\ndata, and no store id to pass.\n\n- **Base URL** \u2014 `https:\/\/api-staging.sappo.xco.agency`\n- **Shape** \u2014 `GET https:\/\/api-staging.sappo.xco.agency\/{app}\/v1\/{resource}`\n- **Authentication** \u2014 `Authorization: Bearer mak_\u2026`\n- **Machine-readable reference** \u2014 [OpenAPI 3.0 document](https:\/\/api-staging.sappo.xco.agency\/docs.json)\n\nResponses are always JSON. A successful resource response carries a `data`\narray and a `meta` object; a failed one carries a single `error` object and\nnothing else.\n\nResource endpoints are reads. Some apps additionally accept a write endpoint; where one exists, that app's own guide documents it.\n\nThe full guide \u2014 authentication, paging, filtering, every error code and the\nrate limits \u2014 is at [https:\/\/api-staging.sappo.xco.agency\/docs](https:\/\/api-staging.sappo.xco.agency\/docs), as\nJSON at [https:\/\/api-staging.sappo.xco.agency\/docs\/content.json](https:\/\/api-staging.sappo.xco.agency\/docs\/content.json),\nand the MCP guide for AI assistants is at\n[https:\/\/api-staging.sappo.xco.agency\/docs\/mcp](https:\/\/api-staging.sappo.xco.agency\/docs\/mcp).","contact":{"name":"XCO Agency Support","email":"support@xco.agency"}},"servers":[{"url":"https:\/\/api-staging.sappo.xco.agency","description":"Staging"},{"url":"https:\/\/api.sappo.xco.agency","description":"Production"}],"tags":[{"name":"Product Maestro","description":"Product Maestro exposes schedules, actions at `https:\/\/api-staging.sappo.xco.agency\/product-maestro\/v1\/{resource}`."},{"name":"Rankify","description":"Rankify exposes collections, strategies at `https:\/\/api-staging.sappo.xco.agency\/rankify\/v1\/{resource}`."},{"name":"Ordly","description":"Ordly exposes sheet-syncs, sync-activities at `https:\/\/api-staging.sappo.xco.agency\/ordly\/v1\/{resource}`."},{"name":"Theme Maestro","description":"Theme Maestro exposes scheduled-themes, publish-history at `https:\/\/api-staging.sappo.xco.agency\/theme\/v1\/{resource}`."},{"name":"Quick Notice","description":"Quick Notice exposes notices, redirect-rules at `https:\/\/api-staging.sappo.xco.agency\/quick-notice\/v1\/{resource}`."},{"name":"Quick Widgets","description":"Quick Widgets exposes mini-apps at `https:\/\/api-staging.sappo.xco.agency\/quick-widgets\/v1\/{resource}`."},{"name":"Claimify","description":"Claimify exposes claims, customers, orders at `https:\/\/api-staging.sappo.xco.agency\/claimify\/v1\/{resource}`."},{"name":"Prizify","description":"Prizify exposes challenges, customers, levels, transactions at `https:\/\/api-staging.sappo.xco.agency\/prizify\/v1\/{resource}`."},{"name":"Gift Card Checker","description":"Gift Card Checker exposes gift-cards at `https:\/\/api-staging.sappo.xco.agency\/gift-card-checker\/v1\/{resource}`."},{"name":"Workify","description":"Workify exposes jobs, applications at `https:\/\/api-staging.sappo.xco.agency\/workify\/v1\/{resource}`."},{"name":"Floaty","description":"Floaty exposes buttons, analytics at `https:\/\/api-staging.sappo.xco.agency\/floaty\/v1\/{resource}`."},{"name":"Order Helper","description":"Order Helper exposes requests, tracking at `https:\/\/api-staging.sappo.xco.agency\/order-helper\/v1\/{resource}`."},{"name":"Easy POS","description":"Easy POS exposes pos-orders, daily-summaries at `https:\/\/api-staging.sappo.xco.agency\/easy-pos\/v1\/{resource}`."},{"name":"AI Blogs","description":"AI Blogs exposes articles, campaigns at `https:\/\/api-staging.sappo.xco.agency\/ai-blogs\/v1\/{resource}`."},{"name":"Matchly","description":"Matchly exposes quizzes, responses, products at `https:\/\/api-staging.sappo.xco.agency\/matchly\/v1\/{resource}`."},{"name":"Subscriptions","description":"Subscriptions exposes lease-plans, cancellation-logs, dunning-states, subscription-metrics at `https:\/\/api-staging.sappo.xco.agency\/subscriptions\/v1\/{resource}`."},{"name":"Clubify","description":"Clubify exposes tiers, memberships at `https:\/\/api-staging.sappo.xco.agency\/clubify\/v1\/{resource}`."},{"name":"Journeva","description":"Journeva exposes offers, bundles, discounts, funnels at `https:\/\/api-staging.sappo.xco.agency\/journeva\/v1\/{resource}`."},{"name":"Fieldra","description":"Fieldra exposes metafield-definitions, bulk-operations, automation-rules, activity-logs at `https:\/\/api-staging.sappo.xco.agency\/fieldra\/v1\/{resource}`."},{"name":"Syncto","description":"Syncto exposes sync-history at `https:\/\/api-staging.sappo.xco.agency\/syncto\/v1\/{resource}`."}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"mak_\u2026","description":"Open the app in your Shopify admin, go to Settings \u2192 API Access, and create a token. The full token is shown once, at creation time; afterwards only its first 12 characters are stored in readable form. If that card is locked, API access is not included in your current plan and the app will not create a token until the plan changes. At most three tokens can be active at once, so revoke one you no longer use before creating another."}},"schemas":{"PaginatedMeta":{"type":"object","description":"Describes the page that was returned.","required":["page","pageSize","total"],"properties":{"page":{"type":"integer","description":"The 1-based page returned.","example":1},"pageSize":{"type":"integer","description":"Records per page, after the server cap was applied.","example":25},"total":{"type":"integer","description":"Records matching the filters, across all pages.","example":137}}},"PaginatedResponse":{"type":"object","description":"Every successful list response. `data` items carry the app's own field names.","required":["data","meta"],"properties":{"data":{"type":"array","description":"The records for this page, newest first.","items":{"type":"object","additionalProperties":true}},"meta":{"$ref":"#\/components\/schemas\/PaginatedMeta"}}},"Error":{"type":"object","description":"Every failure. Branch on `error.code`, not on `error.message`.","required":["error"],"properties":{"error":{"type":"object","required":["code","message","status"],"properties":{"code":{"type":"string","description":"Stable machine-readable code.","example":"INVALID_TOKEN"},"message":{"type":"string","description":"Human-readable explanation. Wording may change."},"status":{"type":"integer","description":"The HTTP status, repeated so it survives logging.","example":401}}}}}},"responses":{"Unauthorized":{"description":"No usable token was presented. Returned as `MISSING_TOKEN` when the `Authorization` header is absent or not a Bearer header, and as `INVALID_TOKEN` when the token does not exist, was revoked, has expired, or the store is suspended.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"},"example":{"error":{"code":"INVALID_TOKEN","message":"Token is invalid, expired, or revoked.","status":401}}}}},"Forbidden":{"description":"Not returned by any resource endpoint: no Merchant API resource is plan- or scope-restricted. Defined because the connector endpoint, where an app has one, can answer 403 \u2014 in the connector's own envelope rather than this one.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"NotFound":{"description":"Returned as `APP_NOT_FOUND` when the app handle in the path is not one Sappo serves, and as `RESOURCE_NOT_FOUND` when the app does not expose that resource.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"Resource '{resource}' is not available for '{app}'.","status":404}}}}},"UnprocessableEntity":{"description":"Not returned by any resource endpoint: unknown query parameters are ignored rather than rejected, and a resource endpoint takes no request body. The connector endpoint, where an app has one, returns it as `invalid_action` or `invalid_params` in the connector's own envelope.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"TooManyRequests":{"description":"The token exceeded its request budget. Carries `Retry-After` alongside the `X-RateLimit-*` headers.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"},"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Please slow down.","status":429}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Requests allowed per window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window. Always 0 on this response.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the window resets.","schema":{"type":"integer"}}}},"InternalServerError":{"description":"The request was accepted but failed while being handled. Reported to us automatically.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"},"example":{"error":{"code":"INTERNAL_ERROR","message":"An internal error occurred.","status":500}}}}}}},"paths":{"\/product-maestro\/v1\/schedules":{"get":{"tags":["Product Maestro"],"summary":"List product schedules","description":"Your product schedules, newest first by `createdAt`. Each record\ncarries its `actions` relation \u2014 the individual operations the\nschedule performs.\n\n`selectionType` says what the schedule targets (products, a\ncollection, or an advanced filter) and `selectionIds` holds the\nchosen ids. `conditions` is the JSON rule set for an advanced\nselection.","operationId":"listSchedules","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"status","in":"query","description":"Only schedules in this status. Matched exactly, so it must be upper-case \u2014 unlike the actions resource, this filter does not upper-case the value for you. Common values are `SCHEDULED`, `PENDING`, `PROCESSING`, `COMPLETED`, `FAILED`, `CANCELED` and `RECURRING`; the app owns this column and can store a value this list does not name, so do not reject an unknown one.","schema":{"type":"string","example":"COMPLETED"},"required":false},{"name":"archived","in":"query","description":"`true` for archived schedules only, `false` for schedules that are not archived. Omit the filter to get both.","schema":{"type":"boolean"},"required":false}],"responses":{"200":{"description":"A page of product schedules.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[{"id":204,"title":"Autumn markdown","description":null,"status":"COMPLETED","selectionType":"PRODUCTS","selectionIds":["gid:\/\/shopify\/Product\/7421004382209"],"conditions":null,"isBulk":false,"archived":false,"archivedAt":null,"createdAt":"2026-09-25T10:11:00.000000Z","actions":[{"id":8841,"type":"SET_PRICE","status":"COMPLETED"}]}],"meta":{"page":1,"pageSize":25,"total":58}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/product-maestro\/v1\/actions":{"get":{"tags":["Product Maestro"],"summary":"List schedule actions","description":"The individual actions that make up your schedules \u2014 one row per\nthing Product Maestro will do, or has done \u2014 newest first by\n`createdAt`. Each record carries its parent schedule as\n`product_schedule`.\n\n`scheduledAt` is when the action runs, `startedAt` and `completedAt`\nare filled in as it goes, and `parameters` is a JSON object whose\nkeys depend on `type` (a price action carries an amount, a tag action\ncarries tags). A recurring action keeps `repeat`, `publishedCount`\nand `nextPublishDate`.","operationId":"listActions","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"status","in":"query","description":"Only actions in this status. Case-insensitive \u2014 the value is upper-cased before it is matched. Common values are `SCHEDULED`, `PENDING`, `PROCESSING`, `COMPLETED`, `FAILED`, `CANCELED`, `SKIPPED`, `STOPPED` and `RECURRING`; the app owns this column and can store a value this list does not name, so do not reject an unknown one.","schema":{"type":"string","example":"COMPLETED"},"required":false},{"name":"type","in":"query","description":"Only actions of this type. Matched exactly, so it must be upper-case. Common values are `SET_PRICE`, `INCREASE_PRICE`, `DECREASE_PRICE`, `ADD_TAG`, `REMOVE_TAG`, `PUBLISH`, `DRAFT`, `ARCHIVE`, `SET_INVENTORY` and `PRODUCT_SET`; the list is not exhaustive \u2014 the app adds types as it gains features, and `GET \/product-maestro\/v1\/actions` shows which ones your own schedules use.","schema":{"type":"string","example":"SET_PRICE"},"required":false}],"responses":{"200":{"description":"A page of schedule actions.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[{"id":8841,"scheduleId":204,"status":"COMPLETED","type":"SET_PRICE","scheduledAt":"2026-09-30T06:00:00.000000Z","startedAt":"2026-09-30T06:00:04.000000Z","completedAt":"2026-09-30T06:00:31.000000Z","parameters":{"price":"19.99"},"repeat":"NONE","publishedCount":1,"nextPublishDate":null,"createdAt":"2026-09-25T10:11:00.000000Z","product_schedule":{"id":204,"title":"Autumn markdown","status":"COMPLETED"}}],"meta":{"page":1,"pageSize":25,"total":913}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/rankify\/v1\/collections":{"get":{"tags":["Rankify"],"summary":"List collections","description":"The collections Rankify has synced from your store, **most recently\nchanged first** by `updated_at` \u2014 not by creation time, unlike most\nother resources here.\n\nEach record carries `collection_sort_strategy`, the sorting rule\nassigned to it, with that rule's own `sort_strategy` nested inside.\nA collection with no rule assigned has `collection_sort_strategy` set\nto `null`. Field names on this resource are snake_case, matching the\ncollection table Rankify keeps.","operationId":"listCollections","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"type","in":"query","description":"Only collections of this type, matched exactly against the stored `collection_type` \u2014 Shopify's `smart_collection` or `custom_collection`.","schema":{"type":"string"},"required":false},{"name":"has_strategy","in":"query","description":"`true` for collections that have a sorting rule assigned, `false` for those that have none. Omit the filter to get both.","schema":{"type":"boolean"},"required":false}],"responses":{"200":{"description":"A page of collections.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[{"id":88,"title":"Best sellers","handle":"best-sellers","collection_type":"smart_collection","products_count":142,"sort_order":"manual","published_at":"2026-03-02T00:00:00.000000Z","is_ready":true,"updated_at":"2026-10-01T04:30:12.000000Z","admin_graphql_api_id":"gid:\/\/shopify\/Collection\/413045162049","collection_sort_strategy":{"id":12,"title":"Revenue, 30 days","is_active":true,"job_status":"done","sort_strategy":{"id":3,"title":"Revenue","key":"revenue"}}}],"meta":{"page":1,"pageSize":25,"total":214}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/rankify\/v1\/strategies":{"get":{"tags":["Rankify"],"summary":"List sort strategies","description":"Each row is one sorting rule applied to one collection \u2014 the join\nbetween a collection and the strategy that orders it \u2014 **most\nrecently changed first** by `updatedAt`, not by creation time.\n\nEvery record carries three relations: `collection` (what is being\nsorted), `sort_strategy` (the reusable strategy definition, with its\nown `rules`) and `rules` (the per-assignment rule rows).\n`last_run_at` is when Rankify last reordered the collection, and\n`job_status` is where that run got to.","operationId":"listStrategies","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"active","in":"query","description":"`true` for assignments that are switched on, `false` for those switched off. Omit the filter to get both.","schema":{"type":"boolean"},"required":false},{"name":"status","in":"query","description":"Only assignments whose last run ended in this state, matched exactly against the stored `job_status` \u2014 for example `pending`, `done` or `failed`.","schema":{"type":"string"},"required":false}],"responses":{"200":{"description":"A page of sort strategy assignments.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[{"id":12,"title":"Revenue, 30 days","description":null,"is_active":true,"job_status":"done","direction":"desc","last_run_at":"2026-10-01T04:30:12.000000Z","collectionId":88,"sortStrategyId":3,"frequency_value":24,"product_limits":null,"updatedAt":"2026-10-01T04:30:12.000000Z","collection":{"id":88,"title":"Best sellers","handle":"best-sellers"},"sort_strategy":{"id":3,"title":"Revenue","key":"revenue","mode":"order_by"},"rules":[]}],"meta":{"page":1,"pageSize":25,"total":31}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/ordly\/v1\/sheet-syncs":{"get":{"tags":["Ordly"],"summary":"List sheet syncs","description":"Sheet syncs for the authenticated shop.","operationId":"listSheetSyncs","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of sheet-syncs.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/ordly\/v1\/sync-activities":{"get":{"tags":["Ordly"],"summary":"List sync activities","description":"Sync activity for the authenticated shop.","operationId":"listSyncActivities","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of sync-activities.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/theme\/v1\/scheduled-themes":{"get":{"tags":["Theme Maestro"],"summary":"List scheduled theme publishes","description":"Your scheduled theme changes: when a theme is due to be published, or\nhave its content swapped.\n\nFields are camelCase (`startAt`, `ianaTimezone`, \u2026) and also\nmirrored as snake_case aliases on v1 (`start_at`, `iana_timezone`, \u2026)\nso existing Make\/Zapier\/scripts keep working. `status` is a number,\nnot a word; see the values on the filter below. `themeId` is the\nShopify theme id. A repeating schedule keeps `repeat`,\n`repeatOccurrences`, `publishedCount` and `nextPublishDate`.","operationId":"listScheduledThemes","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"status","in":"query","description":"Only schedules in this state, as a number: `0` pending, `1` published, `2` in progress, `3` failed, `4` skipped, `5` stopped, `6` publishing.","schema":{"type":"integer","enum":[0,1,2,3,4,5,6]},"required":false},{"name":"type","in":"query","description":"Only schedules of this kind: `content` swaps JSON theme content, `canvas` patches a Canvas liquid theme, `publish` publishes a theme, `flow` is driven by a flow.","schema":{"type":"string","enum":["content","canvas","publish","flow"]},"required":false}],"responses":{"200":{"description":"A page of scheduled theme changes.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[{"id":471,"name":"Black Friday banner","status":0,"type":"content","themeId":9,"startAt":"2026-11-27T05:00:00.000000Z","start_at":"2026-11-27T05:00:00.000000Z","ianaTimezone":"America\/New_York","iana_timezone":"America\/New_York","skipped":false,"repeat":"none","repeatOccurrences":0,"publishedCount":0,"nextPublishDate":null,"createdAt":"2026-10-01T12:03:44.000000Z"}],"meta":{"page":1,"pageSize":25,"total":12}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/theme\/v1\/publish-history":{"get":{"tags":["Theme Maestro"],"summary":"List theme publish history","description":"An audit trail of theme publishes for this shop (Shopify\nthemes\/publish webhook deliveries and Maestro scheduled publishes),\nmost recently published first by `publishedAt`.\n\nThis is not the schedule list (`\/v1\/scheduled-themes`). `themeName`\nis stored on the row so a renamed or deleted theme still has history.\n`themeId` is the Shopify theme id when known.","operationId":"listPublishHistory","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of theme publish events.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[{"id":2208,"themeName":"Dawn Black Friday","themeId":9,"notes":null,"publishedAt":"2026-09-27T05:00:11.000000Z","createdAt":"2026-09-27T05:00:11.000000Z"}],"meta":{"page":1,"pageSize":25,"total":64}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/quick-notice\/v1\/notices":{"get":{"tags":["Quick Notice"],"summary":"List notices","description":"Notices for the authenticated shop.","operationId":"listNotices","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of notices.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/quick-notice\/v1\/redirect-rules":{"get":{"tags":["Quick Notice"],"summary":"List redirect rules","description":"Redirect rules for the authenticated shop.","operationId":"listRedirectRules","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of redirect-rules.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/quick-widgets\/v1\/mini-apps":{"get":{"tags":["Quick Widgets"],"summary":"List installed mini apps","description":"Mini apps installed on the authenticated shop. Catalog settings payloads are omitted.","operationId":"listMiniApps","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of mini-apps.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/claimify\/v1\/claims":{"get":{"tags":["Claimify"],"summary":"List claims","description":"Every claim raised in your store, newest first by `createdAt`.\n\nEach record carries the claim's own fields and three eager-loaded\nrelations: `customer`, `order`, and `line_items` (the claimed order\nlines, each with the `line_item` it points at). Relation keys are\nsnake_case even though the claim's own fields are camelCase.","operationId":"listClaims","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"status","in":"query","description":"Only claims in this status. Case-insensitive \u2014 the value is upper-cased before it is matched, so `pending` and `PENDING` behave the same.","schema":{"type":"string","enum":["PENDING","PROCESSING","APPROVED","REJECTED","CUSTOM"]},"required":false},{"name":"archived","in":"query","description":"`true` for archived claims only, `false` for claims that are not archived. Omit the filter to get both.","schema":{"type":"boolean"},"required":false}],"responses":{"200":{"description":"A page of claims.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[{"id":1042,"status":"PENDING","reason":"Arrived damaged","resolution":null,"orderId":57,"customerId":19,"tags":["damaged"],"externalPurchase":false,"archivedAt":null,"resolvedAt":null,"createdAt":"2026-09-28T09:14:02.000000Z","customer":{"id":19,"firstName":"Ada","lastName":"Lovelace","email":"ada@example.com"},"order":{"id":57,"name":"#1057","orderNumber":1057,"cancelledAt":null},"line_items":[]}],"meta":{"page":1,"pageSize":25,"total":137}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/claimify\/v1\/customers":{"get":{"tags":["Claimify"],"summary":"List customers","description":"Customers Claimify has seen, newest first by `createdAt`. A customer\nappears here once a claim or an order has been synced for them, so\nthis is not your whole Shopify customer list.\n\n`shopify_customer_id` is the id of the same customer in the Shopify\nAdmin API, which is how you join these records to your own data.\nThis resource takes no filters.","operationId":"listCustomers","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of customers.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[{"id":19,"firstName":"Ada","lastName":"Lovelace","email":"ada@example.com","phone":null,"shopify_customer_id":"7421004382209","createdAt":"2026-08-11T15:02:47.000000Z"}],"meta":{"page":1,"pageSize":25,"total":482}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/claimify\/v1\/orders":{"get":{"tags":["Claimify"],"summary":"List orders","description":"Orders Claimify has synced, newest first by `createdAt`. Only orders\nbelonging to a customer of your store are returned.\n\nMoney fields (`subtotalPrice`, `totalPrice`, `totalTax`) are strings\nso no decimal is lost in transit, and `currencyCode` says what they\nare in. `fulfillment_status` is a JSON object, and `shopify_order_id`\njoins the record to the Shopify Admin API.","operationId":"listOrders","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"cancelled","in":"query","description":"`true` for cancelled orders only, `false` for orders that are not cancelled. Omit the filter to get both.","schema":{"type":"boolean"},"required":false}],"responses":{"200":{"description":"A page of orders.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[{"id":57,"name":"#1057","orderNumber":1057,"email":"ada@example.com","currencyCode":"USD","totalPrice":"129.00","financial_status":"paid","cancelledAt":null,"customerId":19,"shopify_order_id":"5832104902657","createdAt":"2026-09-20T11:48:10.000000Z"}],"meta":{"page":1,"pageSize":25,"total":1204}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/prizify\/v1\/challenges":{"get":{"tags":["Prizify"],"summary":"List challenges","description":"Loyalty challenges for the authenticated shop.","operationId":"listChallenges","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of challenges.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/prizify\/v1\/customers":{"get":{"tags":["Prizify"],"summary":"List customers","description":"Loyalty customers for the authenticated shop. Birthdays and raw metafields are omitted.","operationId":"listPrizifyCustomers","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of customers.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/prizify\/v1\/levels":{"get":{"tags":["Prizify"],"summary":"List levels","description":"Loyalty levels for the authenticated shop.","operationId":"listLevels","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of levels.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/prizify\/v1\/transactions":{"get":{"tags":["Prizify"],"summary":"List point transactions","description":"Point transactions tied to a customer of the authenticated shop. Transactions with no such customer are excluded.","operationId":"listTransactions","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of transactions.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/gift-card-checker\/v1\/gift-cards":{"get":{"tags":["Gift Card Checker"],"summary":"List gift cards","description":"Gift cards your customers have looked up, newest first by\n`createdAt`. Each record carries its `histories` relation: every\nbalance change recorded for that card.\n\n`status` is a boolean \u2014 whether the card is still active \u2014 not a\nword. `balance` and `initValue` are decimal strings with two places.\n\n**The example below is abridged; a record is not.** Every column\nstored for a gift card comes back, including fields that are\nsensitive: `code` holds only the last characters for a card synced\nfrom Shopify but the whole code for a card created in the app,\n`fullCode` holds the full spendable code of every created card, and\n`customerEmail`, `customerName` and `customerId` identify the\nholder. Treat a response like the cards themselves: keep it\nserver-side, do not log it, and do not pass it anywhere a gift-card\ncode or a customer's email address should not reach.","operationId":"listGiftCards","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"status","in":"query","description":"`true` for active cards only, `false` for inactive cards only. Omit the filter to get both.","schema":{"type":"boolean"},"required":false}],"responses":{"200":{"description":"A page of gift cards.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[{"id":311,"status":true,"balance":"40.00","initValue":"50.00","expiresAt":null,"reminderOptOut":false,"createdAt":"2026-09-14T08:20:55.000000Z","histories":[{"id":904,"giftCardId":311,"balance":"40.00"}]}],"meta":{"page":1,"pageSize":25,"total":76}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/workify\/v1\/jobs":{"get":{"tags":["Workify"],"summary":"List jobs","description":"Your job postings, newest first by `createdAt`.\n\n`id` is a cuid string, not a number \u2014 keep it as a string in your\ncode. `salary` is the composed display line (\"$25.00\u2013$30.00 per\nhour\") while `salaryMin`, `salaryMax`, `salaryCurrency` and\n`salaryPeriod` are the structured parts behind it; a posting typed\nbefore those existed has only `salary`. `location` is likewise the\ncomposed line, with `city` and `state` beside it.","operationId":"listJobs","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"status","in":"query","description":"Only postings in this state, matched exactly: `draft`, `pending_approval`, `published`, `hired` or `closed`.","schema":{"type":"string"},"required":false},{"name":"type","in":"query","description":"Only postings of this employment type, matched exactly against the value stored by the app \u2014 for example `Full-time`.","schema":{"type":"string"},"required":false},{"name":"department","in":"query","description":"Only postings in this department, matched exactly. A posting with no department set is never returned by this filter.","schema":{"type":"string"},"required":false}],"responses":{"200":{"description":"A page of job postings.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[{"id":"clz8h2k1x0001s601m2qd4abc","title":"Warehouse Associate","status":"published","type":"Full-time","department":"Operations","location":"Huntington Beach, CA","city":"Huntington Beach","state":"CA","salary":"$25.00\u2013$30.00 per hour","salaryMin":"25.00","salaryMax":"30.00","salaryCurrency":"USD","salaryPeriod":"hour","salaryVisible":true,"resumeRequired":true,"coverLetterRequired":false,"createdAt":"2026-09-18T16:41:09.000000Z"}],"meta":{"page":1,"pageSize":25,"total":9}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/workify\/v1\/applications":{"get":{"tags":["Workify"],"summary":"List applications","description":"Applications candidates have submitted, newest first by `createdAt`.\nEach record carries the posting it was made against as `job`.\n\n`id` and `jobId` are cuid strings, not numbers. `customAnswers` is a\nJSON object keyed by the question the posting asked, `resume` and\n`coverLetter` hold the submitted text, and `openedAt` is when\nsomebody on your side first read it.\n\nThese records contain personal data about real applicants. Do not\ncopy them anywhere you would not put a CV.","operationId":"listApplications","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"status","in":"query","description":"Only applications in this pipeline stage, matched exactly: `new`, `reviewed`, `contacted`, `interviewing`, `not_a_fit` or `hired`. Applications filed before the pipeline was renamed can also carry the earlier `shortlisted`, `accepted` or `rejected`.","schema":{"type":"string"},"required":false},{"name":"job_id","in":"query","description":"Only applications for this posting. Takes the posting's cuid `id`, as returned by `\/workify\/v1\/jobs`.","schema":{"type":"string"},"required":false}],"responses":{"200":{"description":"A page of applications.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[{"id":"clz8m9p4h0007s601z8ktdefg","name":"Grace Hopper","email":"grace@example.com","phone":"+1 555 0100","status":"new","archived":false,"employerApproved":false,"openedAt":null,"customAnswers":{"Can you lift 20kg?":"Yes"},"jobId":"clz8h2k1x0001s601m2qd4abc","createdAt":"2026-09-29T07:55:21.000000Z","job":{"id":"clz8h2k1x0001s601m2qd4abc","title":"Warehouse Associate","status":"published"}}],"meta":{"page":1,"pageSize":25,"total":48}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/floaty\/v1\/buttons":{"get":{"tags":["Floaty"],"summary":"List buttons","description":"Floating buttons for the authenticated shop.","operationId":"listButtons","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of buttons.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/floaty\/v1\/analytics":{"get":{"tags":["Floaty"],"summary":"List button clicks","description":"Button clicks for the authenticated shop. Scoped through the button group, not the shop domain.","operationId":"listButtonClicks","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of analytics.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/order-helper\/v1\/requests":{"get":{"tags":["Order Helper"],"summary":"List tracking requests","description":"Order-tracking lookups for the authenticated shop.","operationId":"listTrackingRequests","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of requests.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/order-helper\/v1\/tracking":{"get":{"tags":["Order Helper"],"summary":"List tracking events","description":"Tracking events for orders that belong to the authenticated shop.","operationId":"listTrackingEvents","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of tracking.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/easy-pos\/v1\/pos-orders":{"get":{"tags":["Easy POS"],"summary":"List POS orders","description":"POS orders for the authenticated shop.","operationId":"listPosOrders","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of pos-orders.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/easy-pos\/v1\/daily-summaries":{"get":{"tags":["Easy POS"],"summary":"List daily summaries","description":"Daily POS summaries for the authenticated shop.","operationId":"listDailySummaries","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of daily-summaries.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/ai-blogs\/v1\/articles":{"get":{"tags":["AI Blogs"],"summary":"List articles","description":"Articles for the authenticated shop.","operationId":"listArticles","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of articles.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/ai-blogs\/v1\/campaigns":{"get":{"tags":["AI Blogs"],"summary":"List campaigns","description":"Campaigns for the authenticated shop.","operationId":"listCampaigns","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of campaigns.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/matchly\/v1\/quizzes":{"get":{"tags":["Matchly"],"summary":"List quizzes","description":"Quizzes for the authenticated shop. Editor drafts and theme JSON are omitted.","operationId":"listQuizzes","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of quizzes.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/matchly\/v1\/responses":{"get":{"tags":["Matchly"],"summary":"List quiz responses","description":"Quiz responses for quizzes owned by the authenticated shop.","operationId":"listQuizResponses","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of responses.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/matchly\/v1\/products":{"get":{"tags":["Matchly"],"summary":"List recommended products","description":"Products recommended by this shop's quiz responses, with recommendation and conversion counts.","operationId":"listRecommendedProducts","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of products.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/subscriptions\/v1\/lease-plans":{"get":{"tags":["Subscriptions"],"summary":"List lease plans","description":"Lease plans for the authenticated shop.","operationId":"listLeasePlans","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of lease-plans.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/subscriptions\/v1\/cancellation-logs":{"get":{"tags":["Subscriptions"],"summary":"List cancellation logs","description":"Cancellation logs for the authenticated shop.","operationId":"listCancellationLogs","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of cancellation-logs.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/subscriptions\/v1\/dunning-states":{"get":{"tags":["Subscriptions"],"summary":"List dunning states","description":"Dunning states for the authenticated shop.","operationId":"listDunningStates","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of dunning-states.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/subscriptions\/v1\/subscription-metrics":{"get":{"tags":["Subscriptions"],"summary":"List subscription metrics","description":"Subscription metrics for the authenticated shop.","operationId":"listSubscriptionMetrics","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of subscription-metrics.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/clubify\/v1\/tiers":{"get":{"tags":["Clubify"],"summary":"List tiers","description":"Membership tiers for the authenticated shop.","operationId":"listTiers","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of tiers.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/clubify\/v1\/memberships":{"get":{"tags":["Clubify"],"summary":"List memberships","description":"Memberships for the authenticated shop.","operationId":"listMemberships","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of memberships.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/journeva\/v1\/offers":{"get":{"tags":["Journeva"],"summary":"List upsell offers","description":"Upsell offers for the authenticated shop.","operationId":"listOffers","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of offers.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/journeva\/v1\/bundles":{"get":{"tags":["Journeva"],"summary":"List bundles","description":"Bundles for the authenticated shop. Custom HTML, CSS, and the Shopify discount node id are omitted.","operationId":"listBundles","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of bundles.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/journeva\/v1\/discounts":{"get":{"tags":["Journeva"],"summary":"List bundle discounts","description":"Discount rungs for bundles owned by the authenticated shop.","operationId":"listDiscounts","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of discounts.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/journeva\/v1\/funnels":{"get":{"tags":["Journeva"],"summary":"List post-purchase funnels","description":"Post-purchase funnels for the authenticated shop.","operationId":"listFunnels","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of funnels.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/fieldra\/v1\/metafield-definitions":{"get":{"tags":["Fieldra"],"summary":"List metafield definitions","description":"Metafield definitions for the authenticated shop.","operationId":"listMetafieldDefinitions","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of metafield-definitions.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/fieldra\/v1\/bulk-operations":{"get":{"tags":["Fieldra"],"summary":"List bulk operations","description":"Bulk metafield operations for the authenticated shop.","operationId":"listBulkOperations","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of bulk-operations.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/fieldra\/v1\/automation-rules":{"get":{"tags":["Fieldra"],"summary":"List automation rules","description":"Automation rules for the authenticated shop.","operationId":"listAutomationRules","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of automation-rules.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/fieldra\/v1\/activity-logs":{"get":{"tags":["Fieldra"],"summary":"List activity logs","description":"Activity logs for the authenticated shop.","operationId":"listActivityLogs","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of activity-logs.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}},"\/syncto\/v1\/sync-history":{"get":{"tags":["Syncto"],"summary":"List sync history","description":"Theme sync history for the authenticated shop.","operationId":"listSyncHistory","parameters":[{"name":"page","in":"query","required":false,"description":"1-based page number. Values below 1 are treated as 1.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"page_size","in":"query","required":false,"description":"Records per page. Values above 100 are reduced to 100. Echoed back as `meta.pageSize`.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"A page of sync-history.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedResponse"},"example":{"data":[],"meta":{"page":1,"pageSize":25,"total":0}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"404":{"$ref":"#\/components\/responses\/NotFound"},"429":{"$ref":"#\/components\/responses\/TooManyRequests"},"500":{"$ref":"#\/components\/responses\/InternalServerError"}},"security":[{"BearerAuth":[]}]}}}}