{"openapi":"3.1.0","info":{"title":"Back4app (BYOK) API","version":"0.1.0","description":"Back4app (BYOK) lets an AI assistant read your own Back4app data through the Back4app API with a key you supply (Back4app REST API key). Read-only: 5 tools (list_recent_objects, find_objects, get_object, count_objects, get_remote_config). 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 sent to parseapi.back4app.com....\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-back4app.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-back4app/docs"},"termsOfService":"https://connectorbay.com/byok-back4app/terms"},"servers":[{"url":"https://byok-back4app.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-back4app/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_recent_objects":{"post":{"operationId":"list_recent_objects","summary":"List objects of a class, newest first by default, with every stored field. Subject to the class permissions of the REST ","description":"List objects of a class, newest first by default, with every stored field. Subject to the class permissions of the REST key. Use for \"What are the latest rows in my Back4app GameScore class\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"class_name":{"description":"Name of the data class (table), for example 'GameScore'. Built-in classes start with an underscore, for example '_Role'.","maxLength":200,"title":"Class Name","type":"string"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many objects to return (1 to 1000, default 100).","title":"Limit"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many objects to skip, for paging.","title":"Skip"},"order":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":"-createdAt","description":"Comma-separated field names to sort by; a leading minus sorts descending.","title":"Order"},"keys":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated field names to return; leave empty for all fields. Dotted names reach into pointers.","title":"Keys"},"include":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated pointer fields to expand into full objects.","title":"Include"}},"required":["class_name"],"title":"list_recent_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/find_objects":{"post":{"operationId":"find_objects","summary":"Find objects of a class that match a JSON constraint, with every stored field. Subject to the class permissions of the R","description":"Find objects of a class that match a JSON constraint, with every stored field. Subject to the class permissions of the REST key. Use for \"Which GameScore objects in Back4app have a score above 1000\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"class_name":{"description":"Name of the data class (table), for example 'GameScore'. Built-in classes start with an underscore, for example '_Role'.","maxLength":200,"title":"Class Name","type":"string"},"where":{"description":"JSON constraint object, for example {\"playerName\":\"Sean Plott\",\"score\":{\"$gt\":1000}}. Operators include $lt, $lte, $gt, $gte, $ne, $in, $nin, $exists and $regex.","maxLength":2000,"title":"Where","type":"string"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many objects to return (1 to 1000, default 100).","title":"Limit"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many objects to skip, for paging.","title":"Skip"},"order":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated field names to sort by; a leading minus sorts descending.","title":"Order"},"keys":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated field names to return; leave empty for all fields. Dotted names reach into pointers.","title":"Keys"},"include":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated pointer fields to expand into full objects.","title":"Include"}},"required":["class_name","where"],"title":"find_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_object":{"post":{"operationId":"get_object","summary":"Get one object of a class by its objectId, with every stored field. Use for \"Show Back4app GameScore object Ed1nuqPvcm\".","description":"Get one object of a class by its objectId, with every stored field. Use for \"Show Back4app GameScore object Ed1nuqPvcm\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"class_name":{"description":"Name of the data class (table), for example 'GameScore'. Built-in classes start with an underscore, for example '_Role'.","maxLength":200,"title":"Class Name","type":"string"},"object_id":{"description":"The objectId of the object.","maxLength":200,"title":"Object Id","type":"string"},"keys":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated field names to return; leave empty for all fields. Dotted names reach into pointers.","title":"Keys"},"include":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated pointer fields to expand into full objects.","title":"Include"}},"required":["class_name","object_id"],"title":"get_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/count_objects":{"post":{"operationId":"count_objects","summary":"Count the objects of a class, optionally those matching a JSON constraint, without returning them. Use for \"How many Gam","description":"Count the objects of a class, optionally those matching a JSON constraint, without returning them. Use for \"How many GameScore objects with score above 1000 are in Back4app\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"class_name":{"description":"Name of the data class (table), for example 'GameScore'. Built-in classes start with an underscore, for example '_Role'.","maxLength":200,"title":"Class Name","type":"string"},"where":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"JSON constraint object, for example {\"playerName\":\"Sean Plott\",\"score\":{\"$gt\":1000}}. Operators include $lt, $lte, $gt, $gte, $ne, $in, $nin, $exists and $regex.","title":"Where"},"count":{"anyOf":[{"maximum":1,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Always 1: ask for the total count.","title":"Count"},"limit":{"anyOf":[{"maximum":0,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Always 0: return no objects, only the count.","title":"Limit"}},"required":["class_name"],"title":"count_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_remote_config":{"post":{"operationId":"get_remote_config","summary":"Get the app's remote configuration parameters (feature gates, messages of the day) as key and value pairs. Use for \"What","description":"Get the app's remote configuration parameters (feature gates, messages of the day) as key and value pairs. Use for \"What remote config values does my Back4app app serve\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_remote_configArguments","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}}}}