Using the Hustack API

The Hustack API allows external systems to securely access CRM data using company-scoped API keys. Each API key belongs to one workspace and can only access data from that workspace. This makes it possible to connect Hustack with automation tools, reporting tools, AI workflows and custom integrations.

It is designed to be used from systems such as Make, Zapier, n8n, Power Automate, Claude/AI workflows through automation tools, BI/reporting tools, and custom scripts. Hustack today exposes a REST API foundation — a native Claude/MCP connector is not yet available, but the API is structured so one can be added later.

Base URL

https://www.hustack.com/api/v1

You can verify the API is live without authentication by calling the health endpoint:

GET https://www.hustack.com/api/v1/health

{
  "status": "ok",
  "service": "hustack-api",
  "version": "v1"
}

Authentication

All protected requests must include a Bearer token in the Authorization header.

Authorization: Bearer hs_live_xxxxxxxxxxxxxxxxx
  • API keys are generated in Settings → Integrations → API Keys.
  • The full API key is shown only once at creation time — copy and store it securely.
  • API keys can be revoked at any time from the same settings screen.
  • Raw keys are never stored on our servers and are never shown again after creation.
curl -X GET "https://www.hustack.com/api/v1/accounts" \
  -H "Authorization: Bearer hs_live_xxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json"

Scopes

Each API key has one or more scopes. Requests without the required scope return 403 Forbidden. Grant the minimum scopes needed — read-only integrations for reporting or AI analysis usually only need read scopes.

ScopeDescription
read:accountsList and view accounts.
write:accountsCreate accounts.
read:dealsList and view deals/opportunities.
write:dealsCreate deals/opportunities.
read:activitiesList and view activities.
write:activitiesCreate activities.
read:notesList and view notes.
write:notesCreate notes.

Endpoints

All data is automatically scoped to the workspace resolved from your API key. You should never send a company_id in the request body — it is ignored by the API.

MethodPathAuthRequired scopeDescription
GET/healthNoCheck whether the API is live.
GET/accountsYesread:accountsList accounts for the authenticated workspace.
GET/accounts/:idYesread:accountsGet one account by ID.
POST/accountsYeswrite:accountsCreate a new account.
GET/dealsYesread:dealsList deals/opportunities.
GET/deals/:idYesread:dealsGet one deal/opportunity by ID.
POST/dealsYeswrite:dealsCreate a new deal/opportunity.
GET/activitiesYesread:activitiesList activities.
POST/activitiesYeswrite:activitiesCreate a new activity.
GET/notesYesread:notesList notes.
POST/notesYeswrite:notesCreate a new note.

List endpoints accept limit (max 200, default 50) and offset query parameters for pagination.

Example requests

Health check

curl -X GET "https://www.hustack.com/api/v1/health"

List accounts

curl -X GET "https://www.hustack.com/api/v1/accounts" \
  -H "Authorization: Bearer hs_live_xxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json"

Get one account

curl -X GET "https://www.hustack.com/api/v1/accounts/account_id_here" \
  -H "Authorization: Bearer hs_live_xxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json"

Create an account

curl -X POST "https://www.hustack.com/api/v1/accounts" \
  -H "Authorization: Bearer hs_live_xxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corp",
    "industry": "Software",
    "website": "https://acme.example",
    "email": "hello@acme.example",
    "country": "United States"
  }'

List deals

curl -X GET "https://www.hustack.com/api/v1/deals" \
  -H "Authorization: Bearer hs_live_xxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json"

Get one deal

curl -X GET "https://www.hustack.com/api/v1/deals/deal_id_here" \
  -H "Authorization: Bearer hs_live_xxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json"

Create a deal

curl -X POST "https://www.hustack.com/api/v1/deals" \
  -H "Authorization: Bearer hs_live_xxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "New opportunity",
    "value": 25000,
    "currency": "USD",
    "stage": "Qualified",
    "account_id": "optional_account_uuid"
  }'

Create an activity

type must be one of Call, Email, Meeting or Task. Use related_account_id, related_contact_id, related_opportunity_id or related_lead_id to attach the activity to a record.

curl -X POST "https://www.hustack.com/api/v1/activities" \
  -H "Authorization: Bearer hs_live_xxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "Call",
    "title": "Follow-up call",
    "description": "Discuss next steps with the customer.",
    "due_date": "2026-05-20",
    "related_account_id": "account_uuid_here"
  }'

Create a note

curl -X POST "https://www.hustack.com/api/v1/notes" \
  -H "Authorization: Bearer hs_live_xxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Meeting note",
    "content": "The customer is interested in a follow-up meeting next week.",
    "related_account_id": "account_uuid_here"
  }'

Using the API with Make, Zapier or n8n

You can connect Hustack to any automation tool that can make authenticated HTTP requests. Configure an HTTP module with the following settings:

SettingValue
URLhttps://www.hustack.com/api/v1/accounts
MethodGET (or POST for create endpoints)
AuthenticationNone — set headers manually
HeaderAuthorization: Bearer hs_live_xxxxxxxxxxxxxxxxx
HeaderContent-Type: application/json
  • For read-only reporting or AI analysis, start with GET /accounts and GET /deals.
  • For creating CRM data, use POST /notes or POST /activities.
  • Use a separate API key for each external system.
  • Never expose API keys in frontend or browser code.

Using the API with Claude / AI workflows

Hustack does not currently provide a native Claude or MCP connector. You cannot paste a Hustack API key directly into Claude as a built-in integration. For now, you can still use Hustack data in AI workflows by going through an automation layer:

  1. Retrieve CRM data from Hustack using the REST API.
  2. Send that data to your own Claude, OpenAI or other AI workflow (via Make, Zapier, n8n or a custom script).
  3. Generate summaries, pipeline analysis, account strategies, presentation outlines or reports.

AI usage and billing in external tools such as Claude, Make, Zapier or n8n is handled by your own account with that provider. Hustack may still apply API rate limits and usage limits. A native MCP / AI agent connector may be added in the future, but is not available today.

Error responses

StatusError codeMeaning
401unauthorizedMissing or invalid API key.
403forbiddenAPI key does not have the required scope.
410revoked_keyThis API key has been revoked.
410expired_keyThis API key has expired.
429rate_limit_exceededToo many requests. Please try again later.
400bad_requestInvalid request body or query.
500internal_server_errorAn unexpected error occurred.
{ "error": "unauthorized", "message": "Missing API key." }
{ "error": "forbidden", "message": "API key does not have the required scope." }
{ "error": "revoked_key", "message": "This API key has been revoked." }
{ "error": "expired_key", "message": "This API key has expired." }
{ "error": "rate_limit_exceeded", "message": "Too many requests. Please try again later." }
{ "error": "bad_request", "message": "Invalid request body." }
{ "error": "internal_server_error", "message": "An unexpected error occurred." }

Best practices

  • Create a separate API key for each integration.
  • Use the minimum required scopes.
  • Use read-only keys for reporting and AI analysis.
  • Do not expose API keys in frontend or browser code.
  • Store API keys securely (a password manager or your automation tool's secret store).
  • Rotate keys periodically.
  • Revoke unused or leaked keys immediately.
  • Monitor last-used timestamps and API usage logs in the settings screen.
  • Use expiration dates for temporary integrations.
  • Records created via the API are tagged so you can identify them in the UI.