Claude-code-plugins-plus-skills salesloft-install-auth
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/salesloft-pack/skills/salesloft-install-auth" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-salesloft-install-auth && rm -rf "$T"
manifest:
plugins/saas-packs/salesloft-pack/skills/salesloft-install-auth/SKILL.mdsource content
SalesLoft Install & Auth
Overview
Configure access to the SalesLoft REST API v2. SalesLoft supports two OAuth 2.0 flows (authorization code and client credentials) plus API key auth. All requests require
Authorization: Bearer <token> header. Base URL: https://api.salesloft.com/v2/.
Prerequisites
- SalesLoft account with API access enabled
- App registered at developers.salesloft.com for OAuth
- Node.js 18+ or Python 3.10+
Instructions
Step 1: Install HTTP Client
# Node.js — no official SDK, use axios or fetch npm install axios dotenv # Python pip install requests python-dotenv
Step 2: Register OAuth Application
- Go to developers.salesloft.com > Your Applications
- Click "Create Application"
- Set redirect URI (e.g.,
)http://localhost:3000/callback - Copy
andclient_idclient_secret
Step 3: Configure Environment
# .env SALESLOFT_CLIENT_ID=your-client-id SALESLOFT_CLIENT_SECRET=your-client-secret SALESLOFT_REDIRECT_URI=http://localhost:3000/callback SALESLOFT_API_KEY=your-api-key # If using API key auth
Step 4: Implement OAuth Authorization Code Flow
import axios from 'axios'; // Step 1: Redirect user to authorize const authUrl = `https://accounts.salesloft.com/oauth/authorize?` + `client_id=${process.env.SALESLOFT_CLIENT_ID}` + `&redirect_uri=${encodeURIComponent(process.env.SALESLOFT_REDIRECT_URI!)}` + `&response_type=code`; // Step 2: Exchange code for token (in callback handler) async function exchangeCode(code: string) { const { data } = await axios.post('https://accounts.salesloft.com/oauth/token', { client_id: process.env.SALESLOFT_CLIENT_ID, client_secret: process.env.SALESLOFT_CLIENT_SECRET, code, grant_type: 'authorization_code', redirect_uri: process.env.SALESLOFT_REDIRECT_URI, }); // data.access_token, data.refresh_token, data.expires_in return data; }
Step 5: Client Credentials Flow (Server-to-Server)
// No user interaction — recommended for background tasks async function getServiceToken() { const { data } = await axios.post('https://accounts.salesloft.com/oauth/token', { client_id: process.env.SALESLOFT_CLIENT_ID, client_secret: process.env.SALESLOFT_CLIENT_SECRET, grant_type: 'client_credentials', }); return data.access_token; }
Step 6: Verify Connection
const token = await getServiceToken(); const { data } = await axios.get('https://api.salesloft.com/v2/me.json', { headers: { Authorization: `Bearer ${token}` }, }); console.log(`Authenticated as: ${data.data.name} (${data.data.email})`);
Output
Authenticated as: Jane Smith (jane@company.com)
Error Handling
| Error | Cause | Solution |
|---|---|---|
| Expired or invalid token | Refresh token or re-authorize |
| Insufficient OAuth scopes | Check app permissions in developer portal |
| Authorization code already used | Codes are single-use; restart OAuth flow |
| Wrong client_id/secret | Verify credentials in developer portal |
Token Refresh
async function refreshAccessToken(refreshToken: string) { const { data } = await axios.post('https://accounts.salesloft.com/oauth/token', { client_id: process.env.SALESLOFT_CLIENT_ID, client_secret: process.env.SALESLOFT_CLIENT_SECRET, grant_type: 'refresh_token', refresh_token: refreshToken, }); return data; // { access_token, refresh_token, expires_in } }
Resources
Next Steps
After successful auth, proceed to
salesloft-hello-world for your first API call.