agentsclimarketplace

Salesloft common errors

Skill jeremylongshore/claude-code-plugins-plus-skills/plugins/saas-packs/salesloft-pack/skills/salesloft-common-errors

'Diagnose and fix SalesLoft API errors: 401, 403, 422, 429, and 5xx.From its SKILL.md

Install
npx -y skills add jeremylongshore/claude-code-plugins-plus-skills --skill salesloft-common-errors

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its file declares

Copied from the file, not written here

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

4.4 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it

SalesLoft Common Errors

Overview

Quick reference for the most common SalesLoft REST API v2 errors. All errors return JSON with a message field. Rate limiting uses a cost-based system (600 cost/minute).

Error Reference

401 Unauthorized -- Invalid or Expired Token

{ "error": "Not authorized", "error_description": "The access token is invalid" }

Causes: Token expired, revoked, or wrong environment key.

Fix:

// Check if token works
const { data } = await api.get('/me.json').catch(err => {
  if (err.response?.status === 401) {
    console.error('Token invalid. Refreshing...');
    return refreshAccessToken(storedRefreshToken);
  }
  throw err;
});

403 Forbidden -- Insufficient Scopes

{ "error": "Forbidden", "error_description": "Insufficient scope for this resource" }

Fix: Check app scopes in developer portal. Common issue: using user-level OAuth for team-level endpoints (cadences, team templates).

404 Not Found -- Wrong Endpoint or Deleted Resource

# Verify endpoint format -- all endpoints end with .json
curl -s -H "Authorization: Bearer $TOKEN" \
  https://api.salesloft.com/v2/people/12345.json
# NOT /people/12345 (missing .json suffix)

422 Unprocessable Entity -- Validation Errors

{
  "errors": [
    { "attribute": "email_address", "message": "is required" },
    { "attribute": "email_address", "message": "has already been taken" }
  ]
}

Common 422 causes:

FieldErrorSolution
email_addressrequiredMust include when creating a person
email_addressalready takenUse GET /people.json?email_addresses[]=x first
cadence_idnot activeCadence must have current_state: 'active'
person_idalready enrolledCheck existing cadence memberships

429 Too Many Requests -- Rate Limit Exceeded

X-RateLimit-Limit-Per-Minute: 600
X-RateLimit-Remaining-Per-Minute: 0
Retry-After: 42

SalesLoft uses cost-based rate limiting:

  • Default: each request costs 1 point
  • Pages 101-150: 3 points per request
  • Pages 151-250: 8 points per request
  • Pages 251-500: 10 points per request
  • Pages 501+: 30 points per request
// Auto-retry with Retry-After header
api.interceptors.response.use(undefined, async (error) => {
  if (error.response?.status === 429) {
    const wait = parseInt(error.response.headers['retry-after'] || '60');
    await new Promise(r => setTimeout(r, wait * 1000));
    return api.request(error.config);
  }
  throw error;
});

5xx Server Errors

Fix: Retry with exponential backoff. Check status.salesloft.com for outages.

Quick Diagnostic

# 1. Verify token
curl -s -H "Authorization: Bearer $SALESLOFT_API_KEY" \
  https://api.salesloft.com/v2/me.json | jq '.data.email'

# 2. Check API status
curl -s https://status.salesloft.com/api/v2/status.json | jq '.status'

# 3. Test specific endpoint
curl -v -H "Authorization: Bearer $SALESLOFT_API_KEY" \
  'https://api.salesloft.com/v2/people.json?per_page=1'

# 4. Check rate limit remaining
curl -sI -H "Authorization: Bearer $SALESLOFT_API_KEY" \
  https://api.salesloft.com/v2/people.json | grep -i ratelimit

Error Handling

StatusRetryableAction
401NoRefresh token or re-authenticate
403NoUpdate app scopes in developer portal
404NoCheck endpoint URL (must end in .json)
422NoFix request payload
429YesWait for Retry-After header value
500-503YesExponential backoff, check status page

Resources

Next Steps

For comprehensive debugging, see salesloft-debug-bundle.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,144. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.