Claude-code-plugins hubspot-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/hubspot-pack/skills/hubspot-install-auth" ~/.claude/skills/jeremylongshore-claude-code-plugins-hubspot-install-auth && rm -rf "$T"
manifest:
plugins/saas-packs/hubspot-pack/skills/hubspot-install-auth/SKILL.mdsource content
HubSpot Install & Auth
Overview
Set up the
@hubspot/api-client SDK and configure authentication using private app access tokens or OAuth 2.0.
Prerequisites
- Node.js 18+ or Python 3.10+
- HubSpot account (free or paid)
- Private app created in Settings > Integrations > Private Apps
- Required scopes selected for your private app
Instructions
Step 1: Install the SDK
# Node.js (official SDK) npm install @hubspot/api-client # Python pip install hubspot-api-client
Step 2: Create a Private App in HubSpot
- Go to Settings > Integrations > Private Apps
- Click "Create a private app"
- Name your app and select scopes:
/crm.objects.contacts.readcrm.objects.contacts.write
/crm.objects.companies.readcrm.objects.companies.write
/crm.objects.deals.readcrm.objects.deals.write
/crm.objects.custom.readcrm.objects.custom.write
(for properties)crm.schemas.contacts.read
- Copy the generated access token
Step 3: Configure Environment
# .env file (add to .gitignore) HUBSPOT_ACCESS_TOKEN=pat-na1-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # .gitignore echo '.env' >> .gitignore echo '.env.local' >> .gitignore
Step 4: Initialize and Verify
import * as hubspot from '@hubspot/api-client'; const hubspotClient = new hubspot.Client({ accessToken: process.env.HUBSPOT_ACCESS_TOKEN, }); // Verify connection by fetching account info async function verifyConnection() { try { const response = await hubspotClient.crm.contacts.basicApi.getPage( 1, // limit undefined, // after ['firstname', 'lastname', 'email'] ); console.log(`Connected. Found ${response.results.length} contact(s).`); return true; } catch (error) { if (error.code === 401) { console.error('Invalid access token. Check HUBSPOT_ACCESS_TOKEN.'); } else if (error.code === 403) { console.error('Missing scopes. Add crm.objects.contacts.read to your private app.'); } else { console.error('Connection failed:', error.message); } return false; } }
Step 5: OAuth 2.0 Setup (Public Apps)
// For public apps distributed to multiple HubSpot portals const hubspotClient = new hubspot.Client(); // Step 1: Generate authorization URL const authUrl = hubspotClient.oauth.getAuthorizationUrl( 'your-client-id', 'http://localhost:3000/oauth/callback', 'crm.objects.contacts.read crm.objects.contacts.write' ); // Redirect user to authUrl // Step 2: Exchange code for tokens (in callback handler) const tokenResponse = await hubspotClient.oauth.tokensApi.create( 'authorization_code', code, // from query param redirectUri, clientId, clientSecret ); // Step 3: Initialize client with OAuth token const authedClient = new hubspot.Client({ accessToken: tokenResponse.accessToken, }); // Step 4: Refresh tokens before expiry (tokens expire in 30 minutes) const refreshResponse = await hubspotClient.oauth.tokensApi.create( 'refresh_token', undefined, undefined, clientId, clientSecret, refreshToken );
Output
installed in node_modules@hubspot/api-client
file with.envHUBSPOT_ACCESS_TOKEN- Verified API connection with a test call
- OAuth flow configured (if building a public app)
Error Handling
| Error | Code | Cause | Solution |
|---|---|---|---|
| 401 | Invalid or expired token | Regenerate token in Private Apps settings |
| 403 | Missing required scopes | Add scopes and generate new token |
| 429 | Rate limit exceeded | Implement backoff (see ) |
| -- | Package not installed | Run |
| -- | Network blocked | Ensure outbound HTTPS to |
Examples
Python Setup
from hubspot import HubSpot client = HubSpot(access_token=os.environ.get('HUBSPOT_ACCESS_TOKEN')) # Verify connection try: contacts = client.crm.contacts.basic_api.get_page(limit=1) print(f"Connected. Found {len(contacts.results)} contact(s).") except Exception as e: print(f"Connection failed: {e}")
TypeScript with Strict Typing
import * as hubspot from '@hubspot/api-client'; import type { SimplePublicObjectWithAssociations } from '@hubspot/api-client/lib/codegen/crm/contacts'; const client = new hubspot.Client({ accessToken: process.env.HUBSPOT_ACCESS_TOKEN!, numberOfApiCallRetries: 3, // built-in retry support });
Resources
Next Steps
After successful auth, proceed to
hubspot-hello-world for your first CRM operations.