Salesforce node reference - all 80 operations, the credential it needs, and a worked example.
Salesforce REST API (CRM). 80 operations: records on any standard, custom or packaged object (create, get, update, upsert, delete, by external ID, related records, replication windows); convenience creates for Lead, Contact, Account, Opportunity, Case and Task plus lead assignment rules; SOQL and SOSL query and search; record collections and composite requests; Bulk API 2.0 load and export jobs; invocable actions, flows, Apex actions, email alerts and quick actions; approval processes and workflow rules; describe, list views, org limits and platform events.
Credential: Salesforce instance URL + access token - see Credentials.
Salesforce's OAuth scopes partition the platform by API PRODUCT, never by operation and never by object. The complete enumerated list (Mobile SDK Scope Parameter Values, cross-checked against the ConnectedAppOauthAccessScope enum in the Metadata API's ConnectedApp) contains no CRUD-level, verb-level or object-level scope at all: one scope, api ("Manage user data via APIs"), grants the entire REST API, Bulk API 2.0 and Connect REST surface, and full merely encompasses it. Every operation on this node would therefore print the same word. The scopes that ARE distinct name separate products this node does not touch - wave_api (Analytics), cdp_query_api (Data Cloud), pardot_api, sfap_api (Models). What actually decides whether a call succeeds is the layer underneath: the token's USER must hold the API Enabled permission, and can then "query or update only those objects and fields to which they have access via the permissions of the logged-in user" - object CRUD permissions, field-level security and sharing rules, set on a Profile or Permission Set in Setup. So a 403 here is a Setup problem, not a checkbox on the connected app. Four named user permissions gate specific operations rather than whole objects: View Setup and Configuration for getLimits and runNamedQuery, Manage Data Integrations to abort a Bulk job someone else created, and Bulk API Hard Delete for the hard-delete job operation this node deliberately does not offer. One more gate is not a permission at all: the stored access token is a session token that expires on the org's own schedule and this credential does not refresh it, so a 401 is usually an aged-out token rather than anything to grant.
| Operation | What it does |
|---|
createRecord | Create record |
getRecord | Get record by ID |
updateRecord | Update record |
upsertRecord | Upsert record by external ID |
deleteRecord | Delete record |
getRecordByExternalId | Get record by external ID |
deleteRecordByExternalId | Delete record by external ID |
getRelatedRecords | Get related records |
getUpdatedRecords | Get IDs updated in a time window |
getDeletedRecords | Get IDs deleted in a time window |
| Operation | What it does |
|---|
createLead | Create lead |
createContact | Create contact |
createAccount | Create account |
createOpportunity | Create opportunity |
createCase | Create case |
createTask | Create task |
applyLeadAssignmentRules | Apply lead assignment rules |
| Operation | What it does |
|---|
query | Run SOQL query |
queryMore | Get next page of a query |
queryAll | Run SOQL including deleted records |
findRecords | Find records (guided query) |
queryRelated | Query related records |
search | Run SOSL search |
parameterizedSearch | Search without SOSL syntax |
runNamedQuery | Run a named query |
| Operation | What it does |
|---|
collectionCreate | Create many records |
collectionRetrieve | Retrieve many records by ID |
collectionUpdate | Update many records |
collectionUpsert | Upsert many records by external ID |
collectionDelete | Delete many records |
createRecordTree | Create a parent-child record tree |
| Operation | What it does |
|---|
composite | Run dependent subrequests |
compositeBatch | Run independent subrequests |
compositeGraph | Run subrequest graphs |
| Operation | What it does |
|---|
createIngestJob | Create an ingest job |
uploadJobData | Upload CSV to an ingest job |
closeIngestJob | Close an ingest job (start processing) |
abortIngestJob | Abort an ingest job |
getIngestJob | Get ingest job status |
listIngestJobs | List ingest jobs |
getIngestSuccessfulResults | Get successfully loaded rows |
getIngestFailedResults | Get failed rows |
getIngestUnprocessedRecords | Get unprocessed rows |
deleteIngestJob | Delete an ingest job |
| Operation | What it does |
|---|
createQueryJob | Create a query job |
getQueryJob | Get query job status |
getQueryJobResults | Get query job results |
listQueryJobs | List query jobs |
abortQueryJob | Abort a query job |
deleteQueryJob | Delete a query job |
| Operation | What it does |
|---|
listActions | List action types |
listStandardActions | List standard actions |
describeStandardAction | Describe a standard action |
invokeStandardAction | Invoke a standard action |
sendEmail | Send an email |
listCustomActions | List custom actions |
listFlowActions | List invocable flows |
describeFlowAction | Describe a flow's inputs |
invokeFlow | Invoke a flow |
invokeApexAction | Invoke an Apex action |
invokeEmailAlert | Send an email alert |
listQuickActions | List an object's quick actions |
describeQuickAction | Describe a quick action |
invokeQuickAction | Invoke a quick action |
| Operation | What it does |
|---|
listApprovals | List approval processes |
submitForApproval | Submit a record for approval |
approveRecord | Approve a pending record |
rejectRecord | Reject a pending record |
listProcessRules | List workflow rules |
triggerProcessRules | Trigger all workflow rules on records |
triggerProcessRule | Trigger one specific workflow rule |
| Operation | What it does |
|---|
describeObject | Describe an object |
describeGlobal | List all objects |
getObjectBasicInfo | Get an object's basic metadata |
listListViews | List an object's list views |
describeListView | Describe a list view |
getListViewResults | Get list view results |
getLimits | Get org limits |
listApiVersions | List available API versions |
publishPlatformEvent | Publish a platform event |
Create a Lead without discovering its required fields by trial and error
Salesforce's REST API is generic over sObjects — there is no /leads route, only /sobjects/{Type} — so a node that just took "object type + JSON" would be honest but unhelpful: createRecord on Lead fails with a bare REQUIRED_FIELD_MISSING until you happen to know Salesforce demands LastName and Company. createLead is createRecord with the object pinned and those two promoted to named inputs, so the form teaches what the API will insist on.
Set Operation to createLead, then fill in:
| Field | Value | Notes |
|---|
lastName | {{ myTrigger.lastName }} | Required by Salesforce, not by us |
company | {{ myTrigger.company }} | Also required — a Lead with no Company is rejected |
firstName | {{ myTrigger.firstName }} | Optional |
email | {{ myTrigger.email }} | Optional |
fieldsJson | {"LeadSource": "Webhook", "Rating": "Warm"} | Anything else, including custom fields — merged under the named ones |
Sets {{lead.id}} (the 18-character Salesforce id) and {{lead.success}}. A 401 here is reported as INVALID_SESSION_ID with that name, because the stored token is a session token this credential does not refresh — it is an expiry, not a permissions problem.