{"openapi":"3.1.0","info":{"title":"Semuko Public API","version":"1.0.0","description":"Versioned public REST API for Semuko CRM. Authenticate with Authorization: Bearer sk_live_… API keys created in Settings → Preferences → Developer. The same operations are available over MCP at POST /api/v1/mcp."},"servers":[{"url":"https://semuko.com"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"API key from Settings → Preferences → Developer (sk_live_… or sk_test_…)"}},"schemas":{"Scope":{"type":"string","enum":["crm.read","crm.write","invoices.read","invoices.write","contracts.read","contracts.write","booking.read","booking.write","questionnaires.read","questionnaires.write","payments.read","comms.send","workflows.read","workflows.write","workflows.author","templates.write","offers.read","offers.write","proposals.write","timelines.read","timelines.write","assistant.read","webhooks.read","webhooks.write","galleries.read","galleries.write","locations.read","locations.write","vendors.read","vendors.write","equipment.read","equipment.write","packages.read","packages.write","products.read","products.write","asks.read","asks.write","gift_cards.read","gift_cards.write","tags.read","tags.write","beacon.read","beacon.write","schedule.read","schedule.write"],"description":{"crm.read":"Read leads, clients, events, projects, and studio inventory (products, packages, locations, vendors, equipment, Beacon, Schedule, Asks, tags, gift cards)","crm.write":"Create and update leads, clients, events, projects, and studio inventory (products, packages, locations, vendors, equipment, Beacon, Schedule, Asks, tags, gift cards)","invoices.read":"Read invoices","invoices.write":"Create and update invoices","contracts.read":"Read contracts","contracts.write":"Create and update contracts","booking.read":"Read bookings","booking.write":"Create and update bookings","questionnaires.read":"Read questionnaires and responses","questionnaires.write":"Assign questionnaires","payments.read":"Read payments","comms.send":"Send email, SMS, invoices, and contracts","workflows.read":"Read workflow templates","workflows.write":"Apply workflow templates and convert leads","workflows.author":"Create and edit workflow templates","templates.write":"Create and edit email/SMS templates and email designs","offers.read":"Read checkout offers and their items","offers.write":"Create and edit checkout offers, collections, and related settings","proposals.write":"Create and edit proposal templates and proposal coupons","timelines.read":"Read event timelines","timelines.write":"Create and manage event timelines and timeline shares","assistant.read":"Run Ask Semu-style diagnostics, reports, and support article search","webhooks.read":"List outbound webhook subscriptions","webhooks.write":"Create and delete outbound webhook subscriptions","galleries.read":"Read galleries, sets, photos, client favorites and comments","galleries.write":"Create and update galleries and sets, upload, replace and remove photos (Lightroom publishing)","locations.read":"Read locations","locations.write":"Create and update locations","vendors.read":"Read vendors","vendors.write":"Create and update vendors","equipment.read":"Read equipment and equipment kits","equipment.write":"Create and update equipment and equipment kits","packages.read":"Read packages","packages.write":"Create and update packages and their items","products.read":"Read products","products.write":"Create and update products","asks.read":"Read asks and ask starters","asks.write":"Create and update ask starters and start asks","gift_cards.read":"Read gift cards","gift_cards.write":"Issue and update gift cards","tags.read":"Read tags","tags.write":"Create and update tags","beacon.read":"Read Beacon pages and packs","beacon.write":"Create, update, and publish Beacon pages and packs","schedule.read":"Read scheduled social posts","schedule.write":"Create, update, and reschedule social posts"}}}},"x-semuko-default-scopes":["crm.read"],"paths":{"/api/v1/leads":{"get":{"operationId":"list_leads","summary":"List leads with pagination and optional search","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.read"],"x-semuko-mcp-tool":"semuko_list_leads","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_lead","summary":"Create a lead","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.write"],"x-semuko-mcp-tool":"semuko_create_lead","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/leads/{id}":{"get":{"operationId":"get_lead","summary":"Get a lead by id","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.read"],"x-semuko-mcp-tool":"semuko_get_lead","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_lead","summary":"Partially update a lead","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.write"],"x-semuko-mcp-tool":"semuko_update_lead","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/clients":{"get":{"operationId":"list_clients","summary":"List clients","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.read"],"x-semuko-mcp-tool":"semuko_list_clients","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_client","summary":"Create a client","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.write"],"x-semuko-mcp-tool":"semuko_create_client","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/clients/{id}":{"get":{"operationId":"get_client","summary":"Get a client by id","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.read"],"x-semuko-mcp-tool":"semuko_get_client","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_client","summary":"Partially update a client","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.write"],"x-semuko-mcp-tool":"semuko_update_client","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/events":{"get":{"operationId":"list_events","summary":"List events","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.read"],"x-semuko-mcp-tool":"semuko_list_events","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_event","summary":"Create an event","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.write"],"x-semuko-mcp-tool":"semuko_create_event","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/events/{id}":{"get":{"operationId":"get_event","summary":"Get an event by id","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.read"],"x-semuko-mcp-tool":"semuko_get_event","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_event","summary":"Partially update an event","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.write"],"x-semuko-mcp-tool":"semuko_update_event","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/projects":{"get":{"operationId":"list_projects","summary":"List projects","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.read"],"x-semuko-mcp-tool":"semuko_list_projects","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_project","summary":"Create a project","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.write"],"x-semuko-mcp-tool":"semuko_create_project","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/projects/{id}":{"get":{"operationId":"get_project","summary":"Get a project by id","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.read"],"x-semuko-mcp-tool":"semuko_get_project","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_project","summary":"Partially update a project","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.write"],"x-semuko-mcp-tool":"semuko_update_project","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/metadata/brands":{"get":{"operationId":"list_brands","summary":"List brands","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.read"],"x-semuko-mcp-tool":"semuko_list_brands","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/metadata/statuses":{"get":{"operationId":"list_statuses","summary":"List statuses for an object type","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.read"],"x-semuko-mcp-tool":"semuko_list_statuses","parameters":[{"name":"objectType","in":"query","required":true,"schema":{"type":"string","enum":["lead","client","event","project"]}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/metadata/types":{"get":{"operationId":"list_types","summary":"List types for an object type","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.read"],"x-semuko-mcp-tool":"semuko_list_types","parameters":[{"name":"objectType","in":"query","required":true,"schema":{"type":"string","enum":["lead","client","event","project"]}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/metadata/custom-fields":{"get":{"operationId":"list_custom_fields","summary":"List custom field definitions","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["crm.read"],"x-semuko-mcp-tool":"semuko_list_custom_fields","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/webhooks":{"get":{"operationId":"list_webhooks","summary":"List outbound webhook subscriptions","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["webhooks.read"],"x-semuko-mcp-tool":"semuko_list_webhooks","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_webhook","summary":"Create an outbound webhook subscription","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["webhooks.write"],"x-semuko-mcp-tool":"semuko_create_webhook","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/webhooks/{id}":{"delete":{"operationId":"delete_webhook","summary":"Delete a webhook subscription","tags":["L1"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["webhooks.write"],"x-semuko-mcp-tool":"semuko_delete_webhook","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/invoices":{"get":{"operationId":"list_invoices","summary":"List invoices","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["invoices.read"],"x-semuko-mcp-tool":"semuko_list_invoices","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_invoice","summary":"Create an invoice","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["invoices.write"],"x-semuko-mcp-tool":"semuko_create_invoice","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/invoices/{id}":{"get":{"operationId":"get_invoice","summary":"Get an invoice by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["invoices.read"],"x-semuko-mcp-tool":"semuko_get_invoice","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/payments":{"get":{"operationId":"list_payments","summary":"List payments for an invoice","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["payments.read"],"x-semuko-mcp-tool":"semuko_list_payments","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/contracts":{"get":{"operationId":"list_contracts","summary":"List contracts","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["contracts.read"],"x-semuko-mcp-tool":"semuko_list_contracts","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/contracts/{id}":{"get":{"operationId":"get_contract","summary":"Get a contract by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["contracts.read"],"x-semuko-mcp-tool":"semuko_get_contract","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/contracts/from-template":{"post":{"operationId":"create_contract_from_template","summary":"Create a contract from a template","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["contracts.write"],"x-semuko-mcp-tool":"semuko_create_contract_from_template","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/questionnaires":{"get":{"operationId":"list_questionnaires","summary":"List questionnaire templates","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["questionnaires.read"],"x-semuko-mcp-tool":"semuko_list_questionnaires","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/questionnaires/assign":{"post":{"operationId":"assign_questionnaire","summary":"Assign a questionnaire to a CRM object","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["questionnaires.write"],"x-semuko-mcp-tool":"semuko_assign_questionnaire","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/bookings":{"get":{"operationId":"list_bookings","summary":"List bookings","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["booking.read"],"x-semuko-mcp-tool":"semuko_list_bookings","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_booking","summary":"Create a booking","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["booking.write"],"x-semuko-mcp-tool":"semuko_create_booking","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/bookings/{id}":{"get":{"operationId":"get_booking","summary":"Get a booking by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["booking.read"],"x-semuko-mcp-tool":"semuko_get_booking","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/galleries":{"get":{"operationId":"list_galleries","summary":"List galleries (newest activity first) with optional status / client / event filters","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.read"],"x-semuko-mcp-tool":"semuko_list_galleries","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_gallery","summary":"Create a draft gallery (title required; optional clientId, eventId, projectId, brandId, slug)","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp-tool":"semuko_create_gallery","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/galleries/{id}":{"get":{"operationId":"get_gallery","summary":"Get a gallery by id, including its sets and photo counts","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.read"],"x-semuko-mcp-tool":"semuko_get_gallery","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_gallery","summary":"Partially update a gallery (title, slug, links, expiry, cover). Status is not changed here","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp-tool":"semuko_update_gallery","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/galleries/{id}/sets":{"get":{"operationId":"list_gallery_sets","summary":"List the sets (scenes) of a gallery","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.read"],"x-semuko-mcp-tool":"semuko_list_gallery_sets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_gallery_set","summary":"Create a set (scene) in a gallery","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp-tool":"semuko_create_gallery_set","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/galleries/{id}/sets/{setId}":{"patch":{"operationId":"update_gallery_set","summary":"Rename, reorder or hide a gallery set","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp-tool":"semuko_update_gallery_set","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"setId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/galleries/{id}/media":{"get":{"operationId":"list_gallery_media","summary":"List photos in a gallery (status, setId, limit, cursor filters)","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.read"],"x-semuko-mcp-tool":"semuko_list_gallery_media","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/galleries/{id}/selections":{"get":{"operationId":"get_gallery_selections","summary":"Get client favorites lists and comments for a gallery, with photo filenames (submittedOnly=true for submitted lists only)","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.read"],"x-semuko-mcp-tool":"semuko_get_gallery_selections","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/galleries/{id}/uploads":{"post":{"operationId":"create_gallery_upload","summary":"Start presigned multipart uploads: {files:[{name,size,mime?,setId?}], setId?} -> per file {mediaId, uploadId, partSize, parts:[{partNumber,url}]}","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp-tool":"semuko_create_gallery_upload","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/galleries/{id}/uploads/{mediaId}/complete":{"post":{"operationId":"complete_gallery_upload","summary":"Finish a multipart upload: {parts:[{PartNumber,ETag}], sha256?}; queues display sizes","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp-tool":"semuko_complete_gallery_upload","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/galleries/{id}/uploads/{mediaId}/abort":{"post":{"operationId":"abort_gallery_upload","summary":"Cancel an unfinished multipart upload and remove its placeholder photo","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp-tool":"semuko_abort_gallery_upload","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/galleries/{id}/media/{mediaId}":{"patch":{"operationId":"update_gallery_media","summary":"Move a photo to another set, hide/unhide it, star it or change its sort order","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp-tool":"semuko_update_gallery_media","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false},"delete":{"operationId":"delete_gallery_media","summary":"Remove a photo from a gallery. The original is deleted from storage only on Semuko storage or when the storage connection allows deletes","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp-tool":"semuko_delete_gallery_media","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/galleries/{id}/media/{mediaId}/replace":{"post":{"operationId":"replace_gallery_media","summary":"Start replacing a photo file, keeping its id, favorites and comments: {name,size,mime?} -> presigned multipart plan","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp-tool":"semuko_replace_gallery_media","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/galleries/{id}/media/{mediaId}/replace/complete":{"post":{"operationId":"complete_gallery_media_replace","summary":"Finish a replacement: {replacementId?, parts:[{PartNumber,ETag}]}; re-renders display sizes and bumps derivativeVersion","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp-tool":"semuko_complete_gallery_media_replace","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/galleries/{id}/media/{mediaId}/replace/abort":{"post":{"operationId":"abort_gallery_media_replace","summary":"Cancel an unfinished replacement (the current photo is kept)","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp-tool":"semuko_abort_gallery_media_replace","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/actions/apply-workflow":{"post":{"operationId":"apply_workflow","summary":"Apply a workflow template to a lead, client, event, or project","tags":["L3"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["workflows.write"],"x-semuko-mcp-tool":"semuko_apply_workflow","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/actions/convert-lead":{"post":{"operationId":"convert_lead","summary":"Convert a lead to a client","tags":["L3"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["workflows.write","crm.write"],"x-semuko-mcp-tool":"semuko_convert_lead","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/actions/send-email":{"post":{"operationId":"send_email","summary":"Send an email using an account template or raw body","tags":["L3"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["comms.send"],"x-semuko-mcp-tool":"semuko_send_email","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/actions/send-invoice":{"post":{"operationId":"send_invoice","summary":"Send an invoice to the customer","tags":["L3"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["comms.send","invoices.write"],"x-semuko-mcp-tool":"semuko_send_invoice","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/actions/send-contract":{"post":{"operationId":"send_contract","summary":"Send a contract for signature","tags":["L3"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["comms.send","contracts.write"],"x-semuko-mcp-tool":"semuko_send_contract","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/locations":{"get":{"operationId":"list_locations","summary":"List locations with pagination and optional search (brandId, typeId filters)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["locations.read"],"x-semuko-mcp-tool":"semuko_list_locations","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_location","summary":"Create a location","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["locations.write"],"x-semuko-mcp-tool":"semuko_create_location","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/locations/{id}":{"get":{"operationId":"get_location","summary":"Get a location by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["locations.read"],"x-semuko-mcp-tool":"semuko_get_location","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_location","summary":"Partially update a location. Only send fields that should change","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["locations.write"],"x-semuko-mcp-tool":"semuko_update_location","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/vendors":{"get":{"operationId":"list_vendors","summary":"List vendors with pagination and optional search (brandId, typeId filters)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["vendors.read"],"x-semuko-mcp-tool":"semuko_list_vendors","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_vendor","summary":"Create a vendor","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["vendors.write"],"x-semuko-mcp-tool":"semuko_create_vendor","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/vendors/{id}":{"get":{"operationId":"get_vendor","summary":"Get a vendor by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["vendors.read"],"x-semuko-mcp-tool":"semuko_get_vendor","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_vendor","summary":"Partially update a vendor. Only send fields that should change","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["vendors.write"],"x-semuko-mcp-tool":"semuko_update_vendor","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/equipment":{"get":{"operationId":"list_equipment","summary":"List equipment with pagination and optional search (brandId, equipmentTypeId, operationalStatus, kitId, lifecycleStatus filters)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["equipment.read"],"x-semuko-mcp-tool":"semuko_list_equipment","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_equipment","summary":"Create a piece of equipment","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["equipment.write"],"x-semuko-mcp-tool":"semuko_create_equipment","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/equipment/{id}":{"get":{"operationId":"get_equipment","summary":"Get a piece of equipment by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["equipment.read"],"x-semuko-mcp-tool":"semuko_get_equipment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_equipment","summary":"Partially update a piece of equipment. Only send fields that should change","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["equipment.write"],"x-semuko-mcp-tool":"semuko_update_equipment","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/equipment-kits":{"get":{"operationId":"list_equipment_kits","summary":"List equipment kits with pagination and optional search (brandId, lifecycleStatus filters). pieces[] on update replaces the whole list","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["equipment.read"],"x-semuko-mcp-tool":"semuko_list_equipment_kits","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_equipment_kit","summary":"Create a equipment kit","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["equipment.write"],"x-semuko-mcp-tool":"semuko_create_equipment_kit","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/equipment-kits/{id}":{"get":{"operationId":"get_equipment_kit","summary":"Get a equipment kit by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["equipment.read"],"x-semuko-mcp-tool":"semuko_get_equipment_kit","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_equipment_kit","summary":"Partially update a equipment kit. Only send fields that should change","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["equipment.write"],"x-semuko-mcp-tool":"semuko_update_equipment_kit","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/packages":{"get":{"operationId":"list_packages","summary":"List packages with pagination and optional search. items[] ({productId, quantity, unitPrice?, taxable?}) on update replaces the whole list","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["packages.read"],"x-semuko-mcp-tool":"semuko_list_packages","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_package","summary":"Create a package","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["packages.write"],"x-semuko-mcp-tool":"semuko_create_package","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/packages/{id}":{"get":{"operationId":"get_package","summary":"Get a package by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["packages.read"],"x-semuko-mcp-tool":"semuko_get_package","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_package","summary":"Partially update a package. Only send fields that should change","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["packages.write"],"x-semuko-mcp-tool":"semuko_update_package","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/products":{"get":{"operationId":"list_products","summary":"List products with pagination and optional search (brandId, productTypeId, hasOptions, includeArchived filters)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["products.read"],"x-semuko-mcp-tool":"semuko_list_products","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_product","summary":"Create a product","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["products.write"],"x-semuko-mcp-tool":"semuko_create_product","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/products/{id}":{"get":{"operationId":"get_product","summary":"Get a product by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["products.read"],"x-semuko-mcp-tool":"semuko_get_product","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_product","summary":"Partially update a product. Only send fields that should change","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["products.write"],"x-semuko-mcp-tool":"semuko_update_product","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/asks":{"get":{"operationId":"list_asks","summary":"List ask conversations (status, askStatus, linkedType, brandId, eventId, projectId filters)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["asks.read"],"x-semuko-mcp-tool":"semuko_list_asks","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"start_ask","summary":"Start an ask on a lead, client, event, or project (objectType, objectId; optional starterId or sampleKey, introText, brandId). Does not email the contact; returns publicUrl","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["asks.write"],"x-semuko-mcp-tool":"semuko_start_ask","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/asks/{id}":{"get":{"operationId":"get_ask","summary":"Get an ask conversation by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["asks.read"],"x-semuko-mcp-tool":"semuko_get_ask","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/ask-starters":{"get":{"operationId":"list_ask_starters","summary":"List ask starters (reusable ask templates) plus built-in samples","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["asks.read"],"x-semuko-mcp-tool":"semuko_list_ask_starters","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_ask_starter","summary":"Create an ask starter (name required; optional description, introMode text|voice|video, introText, replyModesHint, emailSubject, fileIds)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["asks.write"],"x-semuko-mcp-tool":"semuko_create_ask_starter","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/ask-starters/{id}":{"get":{"operationId":"get_ask_starter","summary":"Get an ask starter by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["asks.read"],"x-semuko-mcp-tool":"semuko_get_ask_starter","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_ask_starter","summary":"Partially update an ask starter","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["asks.write"],"x-semuko-mcp-tool":"semuko_update_ask_starter","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/gift-cards":{"get":{"operationId":"list_gift_cards","summary":"List gift cards (status, brandId, clientId filters). PINs are not included","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["gift_cards.read"],"x-semuko-mcp-tool":"semuko_list_gift_cards","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_gift_card","summary":"Issue a gift card (amountCents required; optional currency, brandId, clientId, invoiceId, purchaser and recipient details, expiresAt)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["gift_cards.write"],"x-semuko-mcp-tool":"semuko_create_gift_card","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/gift-cards/{id}":{"get":{"operationId":"get_gift_card","summary":"Get a gift card by id, including purchase invoice and redemptions","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["gift_cards.read"],"x-semuko-mcp-tool":"semuko_get_gift_card","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_gift_card","summary":"Update a gift card status, expiresAt, or invoiceId (balance is never changed)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["gift_cards.write"],"x-semuko-mcp-tool":"semuko_update_gift_card","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/tags":{"get":{"operationId":"list_tags","summary":"List tags with pagination and optional search (objectType, brandId filters). create needs name and objectType","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["tags.read"],"x-semuko-mcp-tool":"semuko_list_tags","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_tag","summary":"Create a tag","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["tags.write"],"x-semuko-mcp-tool":"semuko_create_tag","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/tags/{id}":{"get":{"operationId":"get_tag","summary":"Get a tag by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["tags.read"],"x-semuko-mcp-tool":"semuko_get_tag","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_tag","summary":"Partially update a tag. Only send fields that should change","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["tags.write"],"x-semuko-mcp-tool":"semuko_update_tag","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/beacon/pages":{"get":{"operationId":"list_beacon_pages","summary":"List Beacon link-in-bio pages (status, brandId filters)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["beacon.read"],"x-semuko-mcp-tool":"semuko_list_beacon_pages","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_beacon_page","summary":"Create a draft Beacon page (name, slug, templateId, brandId, content, design, settings)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["beacon.write"],"x-semuko-mcp-tool":"semuko_create_beacon_page","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/beacon/pages/{id}":{"get":{"operationId":"get_beacon_page","summary":"Get a Beacon page by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["beacon.read"],"x-semuko-mcp-tool":"semuko_get_beacon_page","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_beacon_page","summary":"Partially update a Beacon page. On MCP, use the Semu twin: drafts apply immediately; a live page needs Confirm first.","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["beacon.write"],"x-semuko-mcp-tool":"semuko_update_beacon_page","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/beacon/pages/{id}/publish":{"post":{"operationId":"publish_beacon_page","summary":"Publish a Beacon page (makes it live on the public internet)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["beacon.write"],"x-semuko-mcp-tool":"semuko_publish_beacon_page","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/beacon/packs":{"get":{"operationId":"list_beacon_packs","summary":"List Beacon packs (reusable page style presets)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["beacon.read"],"x-semuko-mcp-tool":"semuko_list_beacon_packs","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_beacon_pack","summary":"Create a Beacon pack (name required; description, baseTemplateId, theme, pagePresets)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["beacon.write"],"x-semuko-mcp-tool":"semuko_create_beacon_pack","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/beacon/packs/{id}":{"get":{"operationId":"get_beacon_pack","summary":"Get a Beacon pack by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["beacon.read"],"x-semuko-mcp-tool":"semuko_get_beacon_pack","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_beacon_pack","summary":"Partially update a Beacon pack","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["beacon.write"],"x-semuko-mcp-tool":"semuko_update_beacon_pack","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/schedule/posts":{"get":{"operationId":"list_schedule_posts","summary":"List scheduled social posts (brandId, status, from, to filters)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["schedule.read"],"x-semuko-mcp-tool":"semuko_list_schedule_posts","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_schedule_post","summary":"Create a social post (brandId and platforms required; scheduleMode draft, schedule, or queue; never publishes immediately). On MCP, use the Semu twin: drafts save right away; scheduling needs Confirm.","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["schedule.write"],"x-semuko-mcp-tool":"semuko_create_schedule_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/schedule/posts/{id}":{"get":{"operationId":"get_schedule_post","summary":"Get a scheduled social post by id","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["schedule.read"],"x-semuko-mcp-tool":"semuko_get_schedule_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_schedule_post","summary":"Partially update a draft, pending, or scheduled social post","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["schedule.write"],"x-semuko-mcp-tool":"semuko_update_schedule_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/schedule/posts/{id}/reschedule":{"post":{"operationId":"reschedule_schedule_post","summary":"Move a social post to a new future time (scheduledAt, ISO). On MCP, use the Semu twin which always Requires Confirm.","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["schedule.write"],"x-semuko-mcp-tool":"semuko_reschedule_schedule_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/offers":{"get":{"operationId":"list_omni_offers","summary":"List checkout offers (purpose, status, brandId, includeArchived filters)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["offers.read"],"x-semuko-mcp-tool":"semuko_list_omni_offers","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_omni_offer","summary":"Create a draft checkout offer (purpose, brandId, title required)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["offers.write"],"x-semuko-mcp-tool":"semuko_create_omni_offer","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/offers/{id}":{"get":{"operationId":"get_omni_offer","summary":"Get a checkout offer by id, including its items","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["offers.read"],"x-semuko-mcp-tool":"semuko_get_omni_offer","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_omni_offer","summary":"Partially update a checkout offer (title, slug, settings, theme, and more)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["offers.write"],"x-semuko-mcp-tool":"semuko_update_omni_offer","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/offers/{id}/publish":{"post":{"operationId":"publish_omni_offer","summary":"Publish a checkout offer (runs publish validation; makes the checkout link live)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["offers.write"],"x-semuko-mcp-tool":"semuko_publish_omni_offer","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/offers/{id}/items":{"get":{"operationId":"list_omni_offer_items","summary":"List the items of a checkout offer","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["offers.read"],"x-semuko-mcp-tool":"semuko_list_omni_offer_items","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"add_omni_offer_item","summary":"Add an item to a checkout offer (objectType product|service|subscription_plan|digital_asset, nameSnapshot, priceSnapshotCents). On MCP, use the Semu twin: drafts apply immediately; a live offer needs Confirm.","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["offers.write"],"x-semuko-mcp-tool":"semuko_add_omni_offer_item","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/offers/{id}/items/{itemId}":{"patch":{"operationId":"update_omni_offer_item","summary":"Partially update an offer item (itemId required). On MCP, use the Semu twin: a live offer needs Confirm.","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["offers.write"],"x-semuko-mcp-tool":"semuko_update_omni_offer_item","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"itemId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/offers/{id}/items/reorder":{"put":{"operationId":"reorder_omni_offer_items","summary":"Set the order of an offer items: {itemIds:[...]} in the new order. On MCP, use the Semu twin: a live offer needs Confirm.","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["offers.write"],"x-semuko-mcp-tool":"semuko_reorder_omni_offer_items","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/timelines":{"get":{"operationId":"list_timelines","summary":"List event timelines (eventId, status filters)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["timelines.read"],"x-semuko-mcp-tool":"semuko_list_timelines","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_timeline","summary":"Create the timeline for an event (eventId required; optional sampleKey or templateId to start from a template). Never replaces an existing timeline","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["timelines.write"],"x-semuko-mcp-tool":"semuko_create_timeline","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/timelines/{id}":{"get":{"operationId":"get_timeline","summary":"Get an event timeline by id with sections, items, and assignments","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["timelines.read"],"x-semuko-mcp-tool":"semuko_get_timeline","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/timelines/{id}/sections":{"post":{"operationId":"upsert_timeline_section","summary":"Create a timeline section (title) or update one (id plus fields: title, kind, body, color, showOnFull, sortOrder)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["timelines.write"],"x-semuko-mcp-tool":"semuko_upsert_timeline_section","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/timelines/{id}/items":{"post":{"operationId":"upsert_timeline_item","summary":"Create a timeline item (title) or update one (id plus fields: title, body, startsAt, durationMinutes, sectionId, assignees)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["timelines.write"],"x-semuko-mcp-tool":"semuko_upsert_timeline_item","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/timelines/{id}/reorder-sections":{"post":{"operationId":"reorder_timeline_sections","summary":"Set the order of timeline sections: {sectionIds:[...]} in the new order","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["timelines.write"],"x-semuko-mcp-tool":"semuko_reorder_timeline_sections","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}}},"/api/v1/workflow-templates":{"get":{"operationId":"list_workflow_templates","summary":"List workflow templates (objectType, brandId, isActive, triggerEvent filters)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["workflows.read"],"x-semuko-mcp-tool":"semuko_list_workflow_templates","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"post":{"operationId":"create_workflow_template","summary":"Create a workflow template (name, objectType required; optional description, brandId, phases[], auto_items[])","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["workflows.author"],"x-semuko-mcp-tool":"semuko_create_workflow_template","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/workflow-templates/{id}":{"get":{"operationId":"get_workflow_template","summary":"Get a workflow template by id with phases and auto items","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["workflows.read"],"x-semuko-mcp-tool":"semuko_get_workflow_template","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}}},"patch":{"operationId":"update_workflow_template","summary":"Partially update a workflow template (phases[] and auto_items[] replace the existing lists)","tags":["L2"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["workflows.author"],"x-semuko-mcp-tool":"semuko_update_workflow_template","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Created"},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden (missing scope)"},"404":{"description":"Not found"},"429":{"description":"Rate limited"}},"x-semuko-mcp":false}},"/api/v1/galleries/{id}/uploads/{mediaId}/parts/{partNumber}":{"put":{"operationId":"relay_gallery_upload_part","summary":"Upload one multipart part through Semuko (fallback for the presigned URL)","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp":false,"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"partNumber","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"{ partNumber, ETag, size } (use the ETag in complete)"},"400":{"description":"Wrong part number or length"},"413":{"description":"Part larger than the relay limit"}}}},"/api/v1/galleries/{id}/media/{mediaId}/replace/parts/{partNumber}":{"put":{"operationId":"relay_gallery_replace_part","summary":"Upload one part of a replacement through Semuko (fallback for the presigned URL)","tags":["L2","Galleries"],"security":[{"ApiKeyAuth":[]}],"x-semuko-scopes":["galleries.write"],"x-semuko-mcp":false,"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"mediaId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"partNumber","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"{ partNumber, ETag, size } (use the ETag in complete)"},"400":{"description":"Wrong part number or length"},"413":{"description":"Part larger than the relay limit"}}}}}}