Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Salesforce connector

OAuth 2.0CRM & Sales

Connect to Salesforce CRM. Manage leads, opportunities, accounts, and customer relationships

Salesforce connector

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Register your Salesforce credentials with Scalekit so it handles the token lifecycle. You do this once per environment.

    Dashboard setup steps

    Register your Scalekit environment with the Salesforce connector so Scalekit handles the authentication flow and token lifecycle for you. The connection name you create will be used to identify and invoke the connection programmatically. You’ll need your app credentials from the Salesforce Developer Console.

    1. Set up auth redirects

      • In Scalekit dashboard, go to AgentKit > Connections > Create Connection.

      • Find Salesforce from the list of providers and click Create.

      • Copy the redirect URI. It looks like https://<SCALEKIT_ENVIRONMENT_URL>/sso/v1/oauth/<CONNECTION_ID>/callback.

        Copy redirect URI from Scalekit dashboard

      • Log in to Salesforce and go to Setup.

      • In the Quick Find box, search for App Manager and click to open it.

      • Click New Connected App.

      • Enter a name for your app, check the Enable OAuth Settings checkbox, and paste the redirect URI in the Callback URL field.

        New Connected App form in Salesforce

      • Select the required OAuth scopes for your application.

    2. Get client credentials

      • In your Connected App settings, note the following:
        • Consumer Key — listed under OAuth Settings
        • Consumer Secret — click Reveal to view and copy
    3. Add credentials in Scalekit

  4. quickstart.ts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENV_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'salesforce'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Salesforce:', link)
    process.stdout.write('Press Enter after authorizing...')
    await new Promise(r => process.stdin.once('data', r))
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'salesforce_limits_get',
    toolInput: {},
    })
    console.log(result)

Connect this agent connector to let your agent:

  • Read CRM records — retrieve accounts, contacts, leads, opportunities, and cases by ID or search query
  • Create and update records — open leads, close opportunities, update deal stages, and edit contacts
  • Log activities — create tasks and events linked to any CRM record
  • Run SOQL queries — execute arbitrary Salesforce Object Query Language queries for custom data retrieval
  • Search across objects — find records by name, email, phone, or any field value
  • Call the Metadata API — use SOAP proxy calls to inspect and modify Salesforce org metadata
Make your first call

Once a user authorizes the connection, make a request to Salesforce through the Scalekit proxy. The example below retrieves the authenticated user’s profile — a useful sanity-check call.

const result = await actions.request({
connectionName: 'salesforce',
identifier: 'user_123',
method: 'GET',
path: '/chatter/users/me',
})
console.log(result)
Query records with SOQL

Retrieve this month’s open opportunities, sorted by deal size:

const result = await actions.request({
connectionName: 'salesforce',
identifier: 'user_123',
method: 'GET',
path: '/query',
params: {
q: 'SELECT Id, Name, Amount, StageName, CloseDate FROM Opportunity WHERE CloseDate = THIS_MONTH ORDER BY Amount DESC LIMIT 10',
},
})
console.log(result.records)
Log a sales call and advance a lead

Find a lead by email, update its status, then log a completed task — all in one agent turn.

This workflow uses Scalekit’s tool calling API (execute_tool), which maps directly to the tool names in the tool list below.

// 1. Search for the lead
const searchResult = await actions.request({
connectionName: 'salesforce',
identifier: 'user_123',
method: 'GET',
path: '/query',
params: { q: "SELECT Id, Status FROM Lead WHERE Email = 'jane@acme.com' LIMIT 1" },
})
const lead = searchResult.records[0]
// 2. Update the lead status
await actions.request({
connectionName: 'salesforce',
identifier: 'user_123',
method: 'PATCH',
path: `/sobjects/Lead/${lead.Id}`,
body: { Status: 'Working - Contacted' },
})
// 3. Log a completed task linked to the lead
await actions.request({
connectionName: 'salesforce',
identifier: 'user_123',
method: 'POST',
path: '/sobjects/Task',
body: {
WhoId: lead.Id,
Subject: 'Discovery call — follow up in 3 days',
Status: 'Completed',
ActivityDate: '2025-04-10',
},
})

Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.

salesforce_account_create#Create a new Account in Salesforce. Supports standard fields15 params

Create a new Account in Salesforce. Supports standard fields

NameTypeRequiredDescription
NamestringrequiredAccount Name
AccountNumberstringoptionalAccount number for the organization
AnnualRevenuenumberoptionalAnnual revenue
BillingCitystringoptionalBilling city
BillingCountrystringoptionalBilling country
BillingPostalCodestringoptionalBilling postal code
BillingStatestringoptionalBilling state/province
BillingStreetstringoptionalBilling street
DescriptionstringoptionalDescription
IndustrystringoptionalIndustry
NumberOfEmployeesintegeroptionalNumber of employees
OwnerIdstringoptionalRecord owner (User/Queue Id)
PhonestringoptionalMain phone number
RecordTypeIdstringoptionalRecord Type Id
WebsitestringoptionalWebsite URL
salesforce_account_delete#Delete an existing Account from Salesforce by account ID. This is a destructive operation that permanently removes the account record.1 param

Delete an existing Account from Salesforce by account ID. This is a destructive operation that permanently removes the account record.

NameTypeRequiredDescription
account_idstringrequiredID of the account to delete
salesforce_account_get#Retrieve details of a specific account from Salesforce by account ID. Returns account properties and associated data.2 params

Retrieve details of a specific account from Salesforce by account ID. Returns account properties and associated data.

NameTypeRequiredDescription
account_idstringrequiredID of the account to retrieve
fieldsstringoptionalComma-separated list of fields to include in the response
salesforce_account_update#Update an existing Account in Salesforce by account ID. Allows updating account properties like name, phone, website, industry, billing information, and more.45 params

Update an existing Account in Salesforce by account ID. Allows updating account properties like name, phone, website, industry, billing information, and more.

NameTypeRequiredDescription
account_idstringrequiredID of the account to update
AccountNumberstringoptionalAccount number for the organization
AccountSourcestringoptionalLead source for this account
AnnualRevenuenumberoptionalAnnual revenue
BillingCitystringoptionalBilling city
BillingCountrystringoptionalBilling country
BillingGeocodeAccuracystringoptionalBilling geocode accuracy
BillingLatitudenumberoptionalBilling address latitude
BillingLongitudenumberoptionalBilling address longitude
BillingPostalCodestringoptionalBilling postal code
BillingStatestringoptionalBilling state/province
BillingStreetstringoptionalBilling street
CleanStatusstringoptionalData.com clean status
DescriptionstringoptionalDescription
DunsNumberstringoptionalD-U-N-S Number
FaxstringoptionalFax number
IndustrystringoptionalIndustry
JigsawstringoptionalData.com key
JigsawCompanyIdstringoptionalJigsaw company ID
NaicsCodestringoptionalNAICS code
NaicsDescstringoptionalNAICS description
NamestringoptionalAccount Name
NumberOfEmployeesintegeroptionalNumber of employees
OwnerIdstringoptionalRecord owner (User/Queue Id)
OwnershipstringoptionalOwnership type
ParentIdstringoptionalParent Account Id
PhonestringoptionalMain phone number
RatingstringoptionalAccount rating
RecordTypeIdstringoptionalRecord Type Id
ShippingCitystringoptionalShipping city
ShippingCountrystringoptionalShipping country
ShippingGeocodeAccuracystringoptionalShipping geocode accuracy
ShippingLatitudenumberoptionalShipping address latitude
ShippingLongitudenumberoptionalShipping address longitude
ShippingPostalCodestringoptionalShipping postal code
ShippingStatestringoptionalShipping state/province
ShippingStreetstringoptionalShipping street
SicstringoptionalSIC code
SicDescstringoptionalSIC description
SitestringoptionalAccount site or location
TickerSymbolstringoptionalStock ticker symbol
TradestylestringoptionalTrade style name
TypestringoptionalAccount type
WebsitestringoptionalWebsite URL
YearStartedstringoptionalYear the company started
salesforce_accounts_list#Retrieve a list of accounts from Salesforce using a pre-built SOQL query. Returns basic account information.1 param

Retrieve a list of accounts from Salesforce using a pre-built SOQL query. Returns basic account information.

NameTypeRequiredDescription
limitnumberrequiredNumber of results to return per page
salesforce_chatter_comment_create#Add a comment to a Salesforce Chatter post (feed element).2 params

Add a comment to a Salesforce Chatter post (feed element).

NameTypeRequiredDescription
feed_element_idstringrequiredThe ID of the Chatter post to comment on
textstringrequiredThe text body of the comment
salesforce_chatter_comment_delete#Delete a comment from a Salesforce Chatter post.1 param

Delete a comment from a Salesforce Chatter post.

NameTypeRequiredDescription
comment_idstringrequiredThe ID of the Chatter comment to delete
salesforce_chatter_comments_list#List all comments on a Salesforce Chatter post (feed element).3 params

List all comments on a Salesforce Chatter post (feed element).

NameTypeRequiredDescription
feed_element_idstringrequiredThe ID of the Chatter post to list comments for
pagestringoptionalPage token for retrieving the next page of results
page_sizenumberoptionalNumber of comments to return per page (default: 25, max: 100)
salesforce_chatter_post_create#Create a new post (feed element) on a Salesforce Chatter feed. Use 'me' as subject_id to post to the current user's feed.4 params

Create a new post (feed element) on a Salesforce Chatter feed. Use 'me' as subject_id to post to the current user's feed.

NameTypeRequiredDescription
textstringrequiredThe text body of the Chatter post
is_rich_textbooleanoptionalIf true, the text body will be treated as HTML rich text. Default is false (plain text).
message_segmentsarrayoptionalAdvanced: provide raw Salesforce message segments array for full rich text control (bold, italic, links, mentions, etc.). When provided, overrides 'text' and 'is_rich_text'. Each segment must have a 'type' field (Text, MarkupBegin, MarkupEnd, Mention, Link). MarkupBegin/End use markupType: Bold, Italic, Underline, Paragraph, etc.
subject_idstringoptionalThe ID of the subject (user, record, or group) to post to. Use 'me' for the current user's feed.
salesforce_chatter_post_delete#Delete a Salesforce Chatter post (feed element) by its ID.1 param

Delete a Salesforce Chatter post (feed element) by its ID.

NameTypeRequiredDescription
feed_element_idstringrequiredThe ID of the Chatter post to delete
salesforce_chatter_post_get#Retrieve a specific Salesforce Chatter post (feed element) by its ID.1 param

Retrieve a specific Salesforce Chatter post (feed element) by its ID.

NameTypeRequiredDescription
feed_element_idstringrequiredThe ID of the Chatter feed element (post) to retrieve.
salesforce_chatter_user_feed_list#Retrieve feed elements (posts) from a Salesforce user's Chatter news feed. Use 'me' as the user ID to get the current user's feed.4 params

Retrieve feed elements (posts) from a Salesforce user's Chatter news feed. Use 'me' as the user ID to get the current user's feed.

NameTypeRequiredDescription
user_idstringrequiredThe ID of the user whose Chatter feed to retrieve. Use 'me' for the current user.
pagestringoptionalPage token for retrieving the next page of results. Use the value from the previous response's nextPageToken.
page_sizenumberoptionalNumber of feed elements to return per page (default: 25, max: 100)
sort_paramstringoptionalSort order for feed elements. Options: LastModifiedDateDesc (default), CreatedDateDesc, MostRecentActivity
salesforce_composite#Execute multiple Salesforce REST API requests in a single call using the Composite API. Allows for efficient batch operations and related data retrieval.1 param

Execute multiple Salesforce REST API requests in a single call using the Composite API. Allows for efficient batch operations and related data retrieval.

NameTypeRequiredDescription
composite_requeststringrequiredJSON string containing composite request with multiple sub-requests
salesforce_contact_create#Create a new contact in Salesforce. Allows setting contact properties like name, email, phone, account association, and other standard fields.15 params

Create a new contact in Salesforce. Allows setting contact properties like name, email, phone, account association, and other standard fields.

NameTypeRequiredDescription
LastNamestringrequiredLast name of the contact (required)
AccountIdstringoptionalSalesforce Account Id associated with this contact
DepartmentstringoptionalDepartment of the contact
DescriptionstringoptionalFree-form description
EmailstringoptionalEmail address of the contact
FirstNamestringoptionalFirst name of the contact
LeadSourcestringoptionalLead source for the contact
MailingCitystringoptionalMailing city
MailingCountrystringoptionalMailing country
MailingPostalCodestringoptionalMailing postal code
MailingStatestringoptionalMailing state/province
MailingStreetstringoptionalMailing street
MobilePhonestringoptionalMobile phone of the contact
PhonestringoptionalPhone number of the contact
TitlestringoptionalJob title of the contact
salesforce_contact_get#Retrieve details of a specific contact from Salesforce by contact ID. Returns contact properties and associated data.2 params

Retrieve details of a specific contact from Salesforce by contact ID. Returns contact properties and associated data.

NameTypeRequiredDescription
contact_idstringrequiredID of the contact to retrieve
fieldsstringoptionalComma-separated list of fields to include in the response
salesforce_dashboard_clone#Clone an existing dashboard in Salesforce. Creates a copy of the source dashboard in the specified folder.3 params

Clone an existing dashboard in Salesforce. Creates a copy of the source dashboard in the specified folder.

NameTypeRequiredDescription
folderIdstringrequiredFolder to place the cloned dashboard
source_dashboard_idstringrequiredID of the dashboard to clone
namestringoptionalName for the cloned dashboard
salesforce_dashboard_get#Retrieve dashboard data and results from Salesforce by dashboard ID. Returns dashboard component data and results from all underlying reports.4 params

Retrieve dashboard data and results from Salesforce by dashboard ID. Returns dashboard component data and results from all underlying reports.

NameTypeRequiredDescription
dashboard_idstringrequiredID of the dashboard to retrieve
filter1stringoptionalFirst dashboard filter value (DashboardFilterOption ID)
filter2stringoptionalSecond dashboard filter value (DashboardFilterOption ID)
filter3stringoptionalThird dashboard filter value (DashboardFilterOption ID)
salesforce_dashboard_metadata_get#Retrieve metadata for a Salesforce dashboard, including dashboard components, filters, layout, and the running user.1 param

Retrieve metadata for a Salesforce dashboard, including dashboard components, filters, layout, and the running user.

NameTypeRequiredDescription
dashboard_idstringrequiredThe unique ID of the Salesforce dashboard
salesforce_dashboard_update#Update a Salesforce dashboard. Supports renaming, moving to a folder, and saving sticky filters. Use GET dashboard first to find filter IDs.4 params

Update a Salesforce dashboard. Supports renaming, moving to a folder, and saving sticky filters. Use GET dashboard first to find filter IDs.

NameTypeRequiredDescription
dashboard_idstringrequiredID of the dashboard to update
filtersarrayoptionalDashboard filters to save (array)
folderIdstringoptionalFolder to move the dashboard to
namestringoptionalNew name for the dashboard
salesforce_global_describe#Retrieve metadata about all available SObjects in the Salesforce organization. Returns list of all objects with basic information.0 params

Retrieve metadata about all available SObjects in the Salesforce organization. Returns list of all objects with basic information.

salesforce_limits_get#Retrieve organization limits information from Salesforce. Returns API usage limits, data storage limits, and other organizational constraints.0 params

Retrieve organization limits information from Salesforce. Returns API usage limits, data storage limits, and other organizational constraints.

salesforce_object_describe#Retrieve detailed metadata about a specific SObject in Salesforce. Returns fields, relationships, and other object metadata.1 param

Retrieve detailed metadata about a specific SObject in Salesforce. Returns fields, relationships, and other object metadata.

NameTypeRequiredDescription
sobjectstringrequiredSObject API name to describe
salesforce_opportunities_list#Retrieve a list of opportunities from Salesforce using a pre-built SOQL query. Returns basic opportunity information.1 param

Retrieve a list of opportunities from Salesforce using a pre-built SOQL query. Returns basic opportunity information.

NameTypeRequiredDescription
limitnumberoptionalNumber of results to return per page
salesforce_opportunity_create#Create a new opportunity in Salesforce. Allows setting opportunity properties like name, amount, stage, close date, and account association.16 params

Create a new opportunity in Salesforce. Allows setting opportunity properties like name, amount, stage, close date, and account association.

NameTypeRequiredDescription
CloseDatestringrequiredExpected close date (YYYY-MM-DD, required)
NamestringrequiredOpportunity name (required)
StageNamestringrequiredCurrent sales stage (required)
AccountIdstringoptionalAssociated Account Id
AmountnumberoptionalOpportunity amount
CampaignIdstringoptionalRelated Campaign Id
Custom_Field__cstringoptionalExample custom field (replace with your org’s custom field API name)
DescriptionstringoptionalOpportunity description
ForecastCategoryNamestringoptionalForecast category name
LeadSourcestringoptionalLead source
NextStepstringoptionalNext step in the sales process
OwnerIdstringoptionalRecord owner (User/Queue Id)
PricebookIdstringoptionalAssociated Price Book Id
ProbabilitynumberoptionalProbability percentage (0–100)
RecordTypeIdstringoptionalRecord Type Id for Opportunity
TypestringoptionalOpportunity type
salesforce_opportunity_get#Retrieve details of a specific opportunity from Salesforce by opportunity ID. Returns opportunity properties and associated data.2 params

Retrieve details of a specific opportunity from Salesforce by opportunity ID. Returns opportunity properties and associated data.

NameTypeRequiredDescription
opportunity_idstringrequiredID of the opportunity to retrieve
fieldsstringoptionalComma-separated list of fields to include in the response
salesforce_opportunity_update#Update an existing opportunity in Salesforce by opportunity ID. Allows updating opportunity properties like name, amount, stage, and close date.16 params

Update an existing opportunity in Salesforce by opportunity ID. Allows updating opportunity properties like name, amount, stage, and close date.

NameTypeRequiredDescription
opportunity_idstringrequiredID of the opportunity to update
AccountIdstringoptionalAssociated Account Id
AmountnumberoptionalOpportunity amount
CampaignIdstringoptionalRelated Campaign Id
CloseDatestringoptionalExpected close date (YYYY-MM-DD)
DescriptionstringoptionalOpportunity description
ForecastCategoryNamestringoptionalForecast category name
LeadSourcestringoptionalLead source
NamestringoptionalOpportunity name
NextStepstringoptionalNext step in the sales process
OwnerIdstringoptionalRecord owner (User/Queue Id)
Pricebook2IdstringoptionalAssociated Price Book Id
ProbabilitynumberoptionalProbability percentage (0–100)
RecordTypeIdstringoptionalRecord Type Id for Opportunity
StageNamestringoptionalCurrent sales stage
TypestringoptionalOpportunity type
salesforce_query_next_page#Fetch the next page of results from a previous SOQL query. Use the nextRecordsUrl returned when a query response has done=false.1 param

Fetch the next page of results from a previous SOQL query. Use the nextRecordsUrl returned when a query response has done=false.

NameTypeRequiredDescription
cursorstringrequiredThe record cursor from a previous SOQL query response. Extract the cursor ID from the nextRecordsUrl (e.g. '01gxx0000002GJm-2000' from '/services/data/v66.0/query/01gxx0000002GJm-2000')
salesforce_query_soql#Execute SOQL queries against Salesforce data. Supports complex queries with joins, filters, and aggregations.1 param

Execute SOQL queries against Salesforce data. Supports complex queries with joins, filters, and aggregations.

NameTypeRequiredDescription
querystringrequiredSOQL query string to execute
salesforce_report_create#Create a new report in Salesforce using the Analytics API. Minimal verified version with only confirmed working fields.13 params

Create a new report in Salesforce using the Analytics API. Minimal verified version with only confirmed working fields.

NameTypeRequiredDescription
namestringrequiredReport name
reportTypestringrequiredThe report type's API name from your Salesforce org (e.g. Opportunity, AccountList). Find valid values in Setup > Report Types
aggregatesstringoptionalAggregates configuration (JSON array)
chartstringoptionalChart configuration (JSON object)
descriptionstringoptionalReport description
detailColumnsstringoptionalDetail columns (JSON array of field names)
folderIdstringoptionalFolder ID where report will be stored
groupingsAcrossstringoptionalColumn groupings (JSON array)
groupingsDownstringoptionalRow groupings (JSON array)
reportBooleanFilterstringoptionalFilter logic
reportFiltersstringoptionalReport filters (JSON array)
reportFormatstringoptionalReport format type. TABULAR (default, no groupings), SUMMARY (supports row groupings), or MATRIX (supports row and column groupings)
scopestringoptionalReport scope. organization (all records) or team (current user's team records)
salesforce_report_delete#Delete an existing report from Salesforce by report ID. This is a destructive operation that permanently removes the report and cannot be undone.1 param

Delete an existing report from Salesforce by report ID. This is a destructive operation that permanently removes the report and cannot be undone.

NameTypeRequiredDescription
report_idstringrequiredID of the report to delete
salesforce_report_metadata_get#Retrieve report, report type, and related metadata for a Salesforce report. Returns information about report structure, fields, groupings, and configuration.1 param

Retrieve report, report type, and related metadata for a Salesforce report. Returns information about report structure, fields, groupings, and configuration.

NameTypeRequiredDescription
report_idstringrequiredThe unique ID of the Salesforce report
salesforce_report_update#Update an existing report in Salesforce by report ID. Minimal verified version with only confirmed working fields. Only updates fields that are provided.13 params

Update an existing report in Salesforce by report ID. Minimal verified version with only confirmed working fields. Only updates fields that are provided.

NameTypeRequiredDescription
report_idstringrequiredID of the report to update
aggregatesstringoptionalAggregates configuration (JSON array)
chartstringoptionalChart configuration (JSON object)
descriptionstringoptionalUpdated report description
detailColumnsstringoptionalDetail columns (JSON array of field names)
folderIdstringoptionalMove report to different folder
groupingsAcrossstringoptionalColumn groupings (JSON array)
groupingsDownstringoptionalRow groupings (JSON array)
namestringoptionalUpdated report name
reportBooleanFilterstringoptionalFilter logic
reportFiltersstringoptionalReport filters (JSON array)
reportFormatstringoptionalReport format type. TABULAR (default, no groupings), SUMMARY (supports row groupings), or MATRIX (supports row and column groupings)
scopestringoptionalReport scope. organization (all records) or team (current user's team records)
salesforce_search_parameterized#Execute parameterized searches against Salesforce data. Provides simplified search interface with predefined parameters.3 params

Execute parameterized searches against Salesforce data. Provides simplified search interface with predefined parameters.

NameTypeRequiredDescription
search_textstringrequiredText to search for
sobjectstringrequiredSObject type to search in
fieldsstringoptionalComma-separated list of fields to return
salesforce_search_sosl#Execute SOSL searches against Salesforce data. Performs full-text search across multiple objects and fields.1 param

Execute SOSL searches against Salesforce data. Performs full-text search across multiple objects and fields.

NameTypeRequiredDescription
search_querystringrequiredSOSL search query string to execute
salesforce_sobject_create#Create a new record for any Salesforce SObject type (Account, Contact, Lead, Opportunity, custom objects, etc.). Provide the object type and fields as a dynamic object.2 params

Create a new record for any Salesforce SObject type (Account, Contact, Lead, Opportunity, custom objects, etc.). Provide the object type and fields as a dynamic object.

NameTypeRequiredDescription
fieldsobjectrequiredObject containing field names and values to set on the new record
sobject_typestringrequiredThe Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c)
salesforce_sobject_delete#Delete a record from any Salesforce SObject type by ID. This is a destructive operation that permanently removes the record.2 params

Delete a record from any Salesforce SObject type by ID. This is a destructive operation that permanently removes the record.

NameTypeRequiredDescription
record_idstringrequiredID of the record to delete
sobject_typestringrequiredThe Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c)
salesforce_sobject_get#Retrieve a record from any Salesforce SObject type by ID. Optionally specify which fields to return.3 params

Retrieve a record from any Salesforce SObject type by ID. Optionally specify which fields to return.

NameTypeRequiredDescription
record_idstringrequiredID of the record to retrieve
sobject_typestringrequiredThe Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c)
fieldsstringoptionalComma-separated list of fields to include in the response
salesforce_sobject_update#Update an existing record for any Salesforce SObject type by ID. Only the fields provided will be updated.3 params

Update an existing record for any Salesforce SObject type by ID. Only the fields provided will be updated.

NameTypeRequiredDescription
fieldsobjectrequiredObject containing field names and values to update on the record
record_idstringrequiredID of the record to update
sobject_typestringrequiredThe Salesforce SObject API name (e.g., Account, Contact, Lead, CustomObject__c)
salesforce_soql_execute#Execute custom SOQL queries against Salesforce data. Supports complex queries with joins, filters, aggregations, and custom field selection.1 param

Execute custom SOQL queries against Salesforce data. Supports complex queries with joins, filters, aggregations, and custom field selection.

NameTypeRequiredDescription
soql_querystringrequiredSOQL query string to execute
salesforce_tooling_query_execute#Execute SOQL queries against Salesforce Tooling API to access metadata objects like ApexClass, ApexTrigger, CustomObject, and development metadata. Use this for querying metadata rather than data objects.1 param

Execute SOQL queries against Salesforce Tooling API to access metadata objects like ApexClass, ApexTrigger, CustomObject, and development metadata. Use this for querying metadata rather than data objects.

NameTypeRequiredDescription
soql_querystringrequiredSOQL query string to execute against Tooling API
salesforce_tooling_sobject_create#Create a new metadata record for any Salesforce Tooling API object type (ApexClass, ApexTrigger, CustomField, etc.). Supports both simple and nested field structures. For CustomField, use FullName and Metadata properties.2 params

Create a new metadata record for any Salesforce Tooling API object type (ApexClass, ApexTrigger, CustomField, etc.). Supports both simple and nested field structures. For CustomField, use FullName and Metadata properties.

NameTypeRequiredDescription
fieldsobjectrequiredObject containing field names and values to set on the new metadata record. Supports nested structures for complex metadata types.
sobject_typestringrequiredThe Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject)
salesforce_tooling_sobject_delete#Delete a metadata record from any Salesforce Tooling API object type by ID. This is a destructive operation that permanently removes the metadata.2 params

Delete a metadata record from any Salesforce Tooling API object type by ID. This is a destructive operation that permanently removes the metadata.

NameTypeRequiredDescription
record_idstringrequiredID of the metadata record to delete
sobject_typestringrequiredThe Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject)
salesforce_tooling_sobject_describe#Retrieve detailed metadata schema for a specific Tooling API object type. Returns fields, relationships, and other metadata properties.1 param

Retrieve detailed metadata schema for a specific Tooling API object type. Returns fields, relationships, and other metadata properties.

NameTypeRequiredDescription
sobjectstringrequiredTooling API object name to describe
salesforce_tooling_sobject_get#Retrieve a metadata record from any Salesforce Tooling API object type by ID. Optionally specify which fields to return.3 params

Retrieve a metadata record from any Salesforce Tooling API object type by ID. Optionally specify which fields to return.

NameTypeRequiredDescription
record_idstringrequiredID of the metadata record to retrieve
sobject_typestringrequiredThe Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject)
fieldsstringoptionalComma-separated list of fields to include in the response
salesforce_tooling_sobject_update#Update an existing metadata record for any Salesforce Tooling API object type by ID. Supports both simple and nested field structures. Only the fields provided will be updated.3 params

Update an existing metadata record for any Salesforce Tooling API object type by ID. Supports both simple and nested field structures. Only the fields provided will be updated.

NameTypeRequiredDescription
fieldsobjectrequiredObject containing field names and values to update on the metadata record. Supports nested structures for complex metadata types.
record_idstringrequiredID of the metadata record to update
sobject_typestringrequiredThe Tooling API object name (e.g., ApexClass, ApexTrigger, CustomObject)

To rename a cloned dashboard, use a two-step pattern:

  1. Call salesforce_dashboard_clone with the source dashboard ID.
  2. Call salesforce_dashboard_update with the cloned dashboard ID and the new name.
{
"dashboard_id": "<cloned_dashboard_id>",
"name": "New dashboard name"
}

See the Salesforce Dashboard clone API for clone payload fields.

The Salesforce Metadata API is a SOAP-based API for reading and modifying your Salesforce org’s configuration, not its data. Use it to inspect or deploy custom objects, page layouts, validation rules, Apex classes, permission sets, profiles, and other org metadata.

Salesforce SOAP APIs only accept opaque access tokens, not JSON Web Token (JWT) access tokens. In your Salesforce Connected App, make sure Issue JSON Web Token (JWT)-based access tokens for named users is unchecked. If you disable this option after users have already authenticated, users must re-authenticate before SOAP proxy calls work.

Get the API version for the connected account

The Metadata API SOAP endpoint URL requires a version number. Retrieve the version from the connected account’s api_config.

15 collapsed lines
import os
import scalekit.client
from dotenv import load_dotenv
load_dotenv()
connection_name = "salesforce" # Connection name from the Scalekit dashboard
identifier = "6fe1c057-f684-4303-9555-3dd8807319b4" # Your user's identifier as registered in Scalekit
scalekit_client = scalekit.client.ScalekitClient(
client_id=os.getenv("SCALEKIT_CLIENT_ID"),
client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
env_url=os.getenv("SCALEKIT_ENV_URL"),
)
actions = scalekit_client.actions
result = actions.get_connected_account(
connection_name=connection_name,
identifier=identifier,
)
raw_version = result.connected_account.api_config.get("version")
if not raw_version:
raise ValueError("Salesforce connected account is missing api_config.version")
api_version = raw_version.lstrip("v") # e.g. "66.0"
  1. Build the SOAP body

    Construct the SOAP envelope for the operation you want to call. Do not include a <SessionHeader> element. Scalekit injects the session header with the connected account’s access token.

    The soap_body string uses the api_version value from the previous section.

    soap_body = f"""<?xml version="1.0" encoding="UTF-8"?>
    <soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:met="http://soap.sforce.com/2006/04/metadata">
    <soapenv:Body>
    <met:describeMetadata>
    <met:asOfVersion>{api_version}</met:asOfVersion>
    </met:describeMetadata>
    </soapenv:Body>
    </soapenv:Envelope>"""
  2. Send the SOAP request through Scalekit

    Pass the SOAP body as raw_body. Set Content-Type to text/xml; charset=UTF-8 and SOAPAction to the operation name. Scalekit resolves the user’s Salesforce instance URL, so the request only needs the Metadata API path.

    try:
    response = actions.request(
    connection_name=connection_name,
    identifier=identifier,
    path=f"/services/Soap/m/{api_version}",
    method="POST",
    raw_body=soap_body,
    headers={
    "Content-Type": "text/xml; charset=UTF-8",
    "SOAPAction": "describeMetadata",
    },
    )
    except Exception as exc:
    raise RuntimeError("Salesforce Metadata API SOAP proxy request failed") from exc
    print(response.content)