TL;DR: To let Ballet pull live Salesforce data (Opportunity, Contract, Line Items, Contact Roles, and more), create a Salesforce Connected App with OAuth 2.0 Client Credentials Flow, set a Run As integration user, and share your My Domain URL plus Consumer Key and Secret. Use a Flow HTTP callout instead when Salesforce only needs to push events into a Ballet webhook.
Back to: How do I connect CRM and support tools?
This article focuses on outbound API. The inbound path is summarized at the end.
Salesforce System Administrator access (or equivalent)
Permission to create a Connected App (or External Client App)
A dedicated Salesforce integration user (recommended)
About 15–20 minutes
Share the Consumer Secret through a secure channel.
Ballet Integration.Use least privilege where possible.
In Setup, go to App Manager.
Click New Connected App. If your org shows New External Client App, use that instead.
Enter Connected App Name: Ballet, leave the API Name default, and set your admin Contact Email.
Under API (Enable OAuth Settings):
Select Enable OAuth Settings
Set Callback URL to https://api.ballet.dev/auth/salesforce/callback (required by Salesforce; unused for Client Credentials)
Select Enable Client Credentials Flow
Under Selected OAuth Scopes, add only Manage user data via APIs (api)
Do not add Perform requests at any time (refresh_token, offline_access) — that scope breaks Client Credentials.
Click Save and wait a few minutes for activation.
Ballet Connected App and click Edit Policies.If this step is skipped, authentication fails with: invalid_grant: no client credentials user enabled
Treat the Consumer Secret like a password. Store it in Ballet Secrets.
https://yourcompany.my.salesforce.com, Sandbox: https://yourcompany--partial.sandbox.my.salesforce.com).curl -X POST "https://YOUR_MY_DOMAIN/services/oauth2/token" \
-d "grant_type=client_credentials" \
-d "client_id=YOUR_CONSUMER_KEY" \
-d "client_secret=YOUR_CONSUMER_SECRET"
A successful response includes an access_token.
When the pop up shows up, press Continue.
On the second page, click the link to install the package in your org.
You will be redirected to Salesforce. Select Install for All Users and install the package.
Use this when Salesforce should start a Ballet playbook.
Bearer <token>.