{"openapi":"3.1.0","info":{"title":"Salesforce (BYOK) API","version":"0.1.0","description":"Salesforce (BYOK) lets an AI assistant read your own Salesforce data through the Salesforce API with a key you supply (Salesforce OAuth access token (the user's API access must allow reading the objects you ask about)). Read-only: 7 tools (run_soql_query, get_more_query_results, run_sosl_search, list_sobjects, describe_sobject, get_record, get_limits). The BYOK key travels with each request, is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-salesforce.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-salesforce/docs"},"termsOfService":"https://connectorbay.com/byok-salesforce/terms"},"servers":[{"url":"https://byok-salesforce.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-salesforce/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/run_soql_query":{"post":{"operationId":"run_soql_query","summary":"Run a read-only SOQL query (for example SELECT Id, Name FROM Account LIMIT 10) and return the matching records. Add LIMI","description":"Run a read-only SOQL query (for example SELECT Id, Name FROM Account LIMIT 10) and return the matching records. Add LIMIT to keep answers small; at most 50 records are returned per call, and nextRecordsUrl continues longer results. Use for \"List the 10 newest Salesforce opportunities with name, stage and amount\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"instance":{"description":"Your Salesforce My Domain name, the first part of your org address (for example 'acme' for acme.my.salesforce.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Instance","type":"string"},"soql":{"description":"SOQL SELECT statement, for example 'SELECT Id, Name, StageName, Amount FROM Opportunity ORDER BY CreatedDate DESC LIMIT 10'.","maxLength":2000,"title":"Soql","type":"string"}},"required":["instance","soql"],"title":"run_soql_queryArguments","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_more_query_results":{"post":{"operationId":"get_more_query_results","summary":"Fetch the next batch of a SOQL query using the locator from nextRecordsUrl (the last part of /services/data/v67.0/query/","description":"Fetch the next batch of a SOQL query using the locator from nextRecordsUrl (the last part of /services/data/v67.0/query/<locator>). Use for \"Get the next page of my Salesforce query results\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"instance":{"description":"Your Salesforce My Domain name, the first part of your org address (for example 'acme' for acme.my.salesforce.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Instance","type":"string"},"locator":{"description":"Query locator taken from nextRecordsUrl, for example '01gD0000002HU6KIAW-2000'.","maxLength":80,"title":"Locator","type":"string"}},"required":["instance","locator"],"title":"get_more_query_resultsArguments","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/run_sosl_search":{"post":{"operationId":"run_sosl_search","summary":"Run a read-only SOSL text search across objects (for example FIND {Acme} IN ALL FIELDS RETURNING Account(Id, Name)). Use","description":"Run a read-only SOSL text search across objects (for example FIND {Acme} IN ALL FIELDS RETURNING Account(Id, Name)). Use for \"Search Salesforce for anything mentioning Acme\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"instance":{"description":"Your Salesforce My Domain name, the first part of your org address (for example 'acme' for acme.my.salesforce.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Instance","type":"string"},"sosl":{"description":"SOSL statement, for example 'FIND {Acme} IN ALL FIELDS RETURNING Account(Id, Name), Contact(Id, Name)'.","maxLength":2000,"title":"Sosl","type":"string"}},"required":["instance","sosl"],"title":"run_sosl_searchArguments","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_sobjects":{"post":{"operationId":"list_sobjects","summary":"List the objects (standard and custom) available in the Salesforce org with their metadata. Use for \"What objects does m","description":"List the objects (standard and custom) available in the Salesforce org with their metadata. Use for \"What objects does my Salesforce org have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"instance":{"description":"Your Salesforce My Domain name, the first part of your org address (for example 'acme' for acme.my.salesforce.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Instance","type":"string"}},"required":["instance"],"title":"list_sobjectsArguments","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/describe_sobject":{"post":{"operationId":"describe_sobject","summary":"Describe one Salesforce object: its fields with types and labels, relationships and record types. Large objects are trun","description":"Describe one Salesforce object: its fields with types and labels, relationships and record types. Large objects are truncated. Use for \"What fields does the Salesforce Opportunity object have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"instance":{"description":"Your Salesforce My Domain name, the first part of your org address (for example 'acme' for acme.my.salesforce.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Instance","type":"string"},"sobject":{"description":"API name of the object, for example 'Account', 'Contact', 'Opportunity' or a custom object such as 'Invoice__c'.","maxLength":80,"title":"Sobject","type":"string"}},"required":["instance","sobject"],"title":"describe_sobjectArguments","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 Salesforce record by object and record id, optionally limited to some fields. Use for \"Show Salesforce account 0","description":"Get one Salesforce record by object and record id, optionally limited to some fields. Use for \"Show Salesforce account 001R0000005hDFYIA2 with name and industry\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"instance":{"description":"Your Salesforce My Domain name, the first part of your org address (for example 'acme' for acme.my.salesforce.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Instance","type":"string"},"sobject":{"description":"API name of the object, for example 'Account', 'Contact', 'Opportunity' or a custom object such as 'Invoice__c'.","maxLength":80,"title":"Sobject","type":"string"},"record_id":{"description":"Salesforce record id (15 or 18 characters).","maxLength":18,"title":"Record Id","type":"string"},"fields":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated field API names to return, for example 'Name,Industry,NumberOfEmployees'.","title":"Fields"}},"required":["instance","sobject","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}},"/v1/tools/get_limits":{"post":{"operationId":"get_limits","summary":"Show the Salesforce org's API limits and how much of each is left (such as daily API requests). Needs the View Setup and","description":"Show the Salesforce org's API limits and how much of each is left (such as daily API requests). Needs the View Setup and Configuration permission. Use for \"How many Salesforce API calls do I have left today\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"instance":{"description":"Your Salesforce My Domain name, the first part of your org address (for example 'acme' for acme.my.salesforce.com).","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Instance","type":"string"}},"required":["instance"],"title":"get_limitsArguments","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}}}}