{"openapi":"3.1.0","info":{"title":"Softr (BYOK) API","version":"0.1.0","description":"Softr (BYOK) lets an AI assistant read your own Softr data through the Softr API with a key you supply (Softr personal access token). Read-only: 8 tools (list_databases, get_database, list_tables, get_table, list_table_views, get_table_field, list_records, get_record). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-softr.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-softr/docs"},"termsOfService":"https://connectorbay.com/byok-softr/terms"},"servers":[{"url":"https://byok-softr.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-softr/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_databases":{"post":{"operationId":"list_databases","summary":"List the Softr databases the token's workspaces can reach, with table counts and dates. Use for \"Which Softr databases d","description":"List the Softr databases the token's workspaces can reach, with table counts and dates. Use for \"Which Softr databases do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_databasesArguments","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_database":{"post":{"operationId":"get_database","summary":"Get one Softr database: name, description, workspace and number of tables. Use for \"How many tables are in my Softr data","description":"Get one Softr database: name, description, workspace and number of tables. Use for \"How many tables are in my Softr database db_abc123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database_id":{"description":"Id of the Softr database (from list_databases).","maxLength":200,"title":"Database Id","type":"string"}},"required":["database_id"],"title":"get_databaseArguments","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_tables":{"post":{"operationId":"list_tables","summary":"List the tables of a Softr database, each with its fields (name, type, flags). Use for \"What tables and columns does my ","description":"List the tables of a Softr database, each with its fields (name, type, flags). Use for \"What tables and columns does my Softr database db_abc123 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database_id":{"description":"Id of the Softr database (from list_databases).","maxLength":200,"title":"Database Id","type":"string"}},"required":["database_id"],"title":"list_tablesArguments","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_table":{"post":{"operationId":"get_table","summary":"Get one Softr table with its field definitions, primary field and default view. Use for \"Show the fields of Softr table ","description":"Get one Softr table with its field definitions, primary field and default view. Use for \"Show the fields of Softr table tbl_abc123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database_id":{"description":"Id of the Softr database (from list_databases).","maxLength":200,"title":"Database Id","type":"string"},"table_id":{"description":"Id of the table inside the database (from list_tables).","maxLength":200,"title":"Table Id","type":"string"}},"required":["database_id","table_id"],"title":"get_tableArguments","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_table_views":{"post":{"operationId":"list_table_views","summary":"List the saved views of a Softr table. Use for \"What views does Softr table tbl_abc123 have\".","description":"List the saved views of a Softr table. Use for \"What views does Softr table tbl_abc123 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database_id":{"description":"Id of the Softr database (from list_databases).","maxLength":200,"title":"Database Id","type":"string"},"table_id":{"description":"Id of the table inside the database (from list_tables).","maxLength":200,"title":"Table Id","type":"string"}},"required":["database_id","table_id"],"title":"list_table_viewsArguments","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_table_field":{"post":{"operationId":"get_table_field","summary":"Get the definition of one field of a Softr table: type, flags and description. Use for \"What type is field fld_1 in Soft","description":"Get the definition of one field of a Softr table: type, flags and description. Use for \"What type is field fld_1 in Softr table tbl_abc123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database_id":{"description":"Id of the Softr database (from list_databases).","maxLength":200,"title":"Database Id","type":"string"},"table_id":{"description":"Id of the table inside the database (from list_tables).","maxLength":200,"title":"Table Id","type":"string"},"field_id":{"description":"Id of the field (from get_table).","maxLength":200,"title":"Field Id","type":"string"}},"required":["database_id","table_id","field_id"],"title":"get_table_fieldArguments","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_records":{"post":{"operationId":"list_records","summary":"List records of a Softr table with offset paging, optionally limited to one view. Default page size is 10. Use for \"Show","description":"List records of a Softr table with offset paging, optionally limited to one view. Default page size is 10. Use for \"Show the first records in Softr table tbl_abc123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database_id":{"description":"Id of the Softr database (from list_databases).","maxLength":200,"title":"Database Id","type":"string"},"table_id":{"description":"Id of the table inside the database (from list_tables).","maxLength":200,"title":"Table Id","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records to return (1 or more; the docs state no maximum, 100 is a safe choice).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip.","title":"Offset"},"field_names":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to key each record's fields by field name instead of field id.","title":"Field Names"},"view_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only records visible in this view id (from list_table_views).","title":"View Id"}},"required":["database_id","table_id"],"title":"list_recordsArguments","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_record":{"post":{"operationId":"get_record","summary":"Get one record of a Softr table by id, with all its field values. Use for \"Get Softr record rec_1 from table tbl_abc123\"","description":"Get one record of a Softr table by id, with all its field values. Use for \"Get Softr record rec_1 from table tbl_abc123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database_id":{"description":"Id of the Softr database (from list_databases).","maxLength":200,"title":"Database Id","type":"string"},"table_id":{"description":"Id of the table inside the database (from list_tables).","maxLength":200,"title":"Table Id","type":"string"},"record_id":{"description":"Id of the record (from list_records).","maxLength":200,"title":"Record Id","type":"string"},"field_names":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to key each record's fields by field name instead of field id.","title":"Field Names"}},"required":["database_id","table_id","record_id"],"title":"get_recordArguments","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}}}}