{"openapi":"3.1.0","info":{"title":"Flotiq (BYOK) API","version":"0.1.0","description":"Flotiq (BYOK) lets an AI assistant read your own Flotiq data through the Flotiq API with a key you supply (Flotiq API key (a read-only application key is enough)). Read-only: 6 tools (list_content_types, get_content_type, list_content_objects, get_content_object, search_content, list_media). The BYOK key travels with each request, is used for that one call only and is never stored, logged or...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-flotiq.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-flotiq/docs"},"termsOfService":"https://connectorbay.com/byok-flotiq/terms"},"servers":[{"url":"https://byok-flotiq.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-flotiq/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_content_types":{"post":{"operationId":"list_content_types","summary":"List the content types (data models) defined in your Flotiq account with id, name, label and schema definition. Use the ","description":"List the content types (data models) defined in your Flotiq account with id, name, label and schema definition. Use the names with the content tools. Use for \"What content types exist in my Flotiq account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only content types whose name contains this text (case-insensitive).","title":"Name"},"label":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only content types whose label contains this text (case-insensitive).","title":"Label"},"order_by":{"anyOf":[{"enum":["name","id","createdAt","updatedAt"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by name (default), id, createdAt or updatedAt.","title":"Order By"},"order_direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order Direction"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items per page (1 to 100; the service default is 20).","title":"Limit"}},"title":"list_content_typesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_content_type":{"post":{"operationId":"get_content_type","summary":"Get the full definition of one content type: its fields, their types and settings. Use for \"What fields does the blogpos","description":"Get the full definition of one content type: its fields, their types and settings. Use for \"What fields does the blogposts content type have in Flotiq\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"content_type":{"description":"Name of the content type (its API name such as 'blogposts', or '_media' for the media library); see list_content_types.","maxLength":100,"title":"Content Type","type":"string"}},"required":["content_type"],"title":"get_content_typeArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_content_objects":{"post":{"operationId":"list_content_objects","summary":"List the content objects of one content type (public ones by default) with all their fields and internal status and date","description":"List the content objects of one content type (public ones by default) with all their fields and internal status and dates. Sort, page and optionally expand linked objects. Use for \"Show my latest blogposts in Flotiq\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"content_type":{"description":"Name of the content type (its API name such as 'blogposts', or '_media' for the media library); see list_content_types.","maxLength":100,"title":"Content Type","type":"string"},"order_by":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Field to sort by, for example internal.createdAt or a field name.","title":"Order By"},"order_direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order Direction"},"hydrate":{"anyOf":[{"maximum":2,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"How many levels of linked objects to expand: 0 none, 1 one level, 2 two levels.","title":"Hydrate"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items per page (1 to 100; the service default is 20).","title":"Limit"},"filters":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"JSON filter, for example {\"title\":{\"type\":\"contains\",\"filter\":\"news\"}}; types include equals, notEqual, contains, notContains, startsWith.","title":"Filters"}},"required":["content_type"],"title":"list_content_objectsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_content_object":{"post":{"operationId":"get_content_object","summary":"Get one content object by id with all its fields and internal status and dates. Use for \"Show the Flotiq blogposts objec","description":"Get one content object by id with all its fields and internal status and dates. Use for \"Show the Flotiq blogposts object blogposts-456712\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"content_type":{"description":"Name of the content type (its API name such as 'blogposts', or '_media' for the media library); see list_content_types.","maxLength":100,"title":"Content Type","type":"string"},"object_id":{"description":"Id of the content object, such as 'blogposts-456712'.","maxLength":100,"title":"Object Id","type":"string"},"hydrate":{"anyOf":[{"maximum":2,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"How many levels of linked objects to expand: 0 none, 1 one level, 2 two levels.","title":"Hydrate"}},"required":["content_type","object_id"],"title":"get_content_objectArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_content":{"post":{"operationId":"search_content","summary":"Full-text search across content objects (optionally one content type) and return matching objects with relevance score. ","description":"Full-text search across content objects (optionally one content type) and return matching objects with relevance score. Searches public objects by default. Use for \"Search my Flotiq content for 'pricing'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"q":{"description":"Search text.","maxLength":200,"title":"Q","type":"string"},"content_type":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Limit the search to this one content type name.","title":"Content Type"},"order_by":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Field to sort by after relevance.","title":"Order By"},"order_direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order Direction"},"query_mode":{"anyOf":[{"enum":["default","exact","fuzzy"],"type":"string"},{"type":"null"}],"default":null,"description":"default, exact for strict matches or fuzzy to tolerate typos.","title":"Query Mode"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 100).","title":"Limit"}},"required":["q"],"title":"search_contentArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_media":{"post":{"operationId":"list_media","summary":"List files in the Flotiq media library (images and other files) with their metadata. Use for \"What images are in my Flot","description":"List files in the Flotiq media library (images and other files) with their metadata. Use for \"What images are in my Flotiq media library\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"order_by":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Field to sort by, for example internal.createdAt.","title":"Order By"},"order_direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: asc or desc.","title":"Order Direction"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many items per page (1 to 100; the service default is 20).","title":"Limit"}},"title":"list_mediaArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}