API Reference

Everything you need to integrate Enrichkit into your workflow. Simple key auth, JSON in, JSON out.

Authentication

All API requests require an API key. Pass it via the X-API-Key header (preferred) or Authorization: Bearer. Generate keys from your dashboard.

X-API-Key (preferred)
Bearer
X-API-Key: ek_your_api_key_here

# or
Authorization: Bearer ek_your_api_key_here

Keys are prefixed with ek_. Keep them secret — do not expose them in client-side code.

Base URL

Base URL
https://enrichkit.dev/api/v1

Enrich Profile

Look up a professional profile by URL. Returns structured data including name, title, company, location, and experience.

POST /v1/profile

Request Body

ParameterTypeRequiredDescription
urlstringYesProfile URL to enrich

Example Request

curl
curl -X POST https://enrichkit.dev/api/v1/profile \
  -H "X-API-Key: ek_your_key" \
  -H "Content-Type: application/json" \
  -d '{"url": "linkedin.com/in/janedoe"}'

Example Response

200 OK
{
  "public_id": "marcela-vidal",
  "profile_id": "ACoAAC1a2bCdEfGhIjKlMnOpQrStUvWxYz",
  "profile_url": "https://www.linkedin.com/in/marcela-vidal",
  "first_name": "Marcela",
  "last_name": "Vidal",
  "headline": "CTO @ Terracotta — we make ERPs not suck | ex-Shopify",
  "summary": "I spent 6 years building commerce infra at Shopify...",
  "location": "Montreal, Quebec, Canada",
  "industry": "Software Development",
  "connections": 2777,
  "follower_count": 2882,
  "current_company": "Terracotta",
  "current_company_linkedin_url": "https://www.linkedin.com/company/terracotta-erp",
  "current_title": "Co-Founder & CTO",
  "profile_picture": "https://media.licdn.com/dms/image/v2/D5603AQ...",
  "experiences": [
    {
      "title": "Co-Founder & CTO",
      "company": "Terracotta",
      "company_logo": "https://media.licdn.com/dms/image/v2/C4D0BAQ...",
      "company_linkedin_url": "https://www.linkedin.com/company/terracotta-erp",
      "location": "Montreal, QC",
      "description": "Vertical ERP for ceramics studios...",
      "start_date": { "month": 3, "year": 2022 },
      "end_date": null
    }
  ],
  "educations": [
    {
      "school": "McGill University",
      "degree": "Bachelor of Science",
      "field": "Computer Science",
      "start_date": { "month": null, "year": 2010 },
      "end_date": { "month": null, "year": 2014 }
    }
  ],
  "skills": ["Ruby on Rails", "PostgreSQL", "TypeScript", ...],
  "certifications": [
    {
      "name": "AWS Certified Solutions Architect – Associate",
      "authority": "Amazon Web Services (AWS)",
      "url": "https://www.credly.com/badges/abc123",
      "issued_date": { "month": 9, "year": 2021 }
    }
  ]
}

The profile_id is a stable identifier that remains consistent across all endpoints (profile, reactions, comments). Use it to match people across responses.

Get Posts

Retrieve recent posts from a profile or company page. Returns ~10 posts per page with pagination.

POST /v1/posts
ParameterTypeRequiredDescription
urlstringYesProfile or company URL
pagination_tokenstringNoToken from previous response to fetch next page

Example Response

200 OK
{
  "has_more": true,
  "pagination_token": "dXJuOmxpOmFjdGl2aXR5Ojc0MjIwND...",
  "posts": [
    {
      "activity_id": "7442685916231475200",
      "post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7442685916231475200/",
      "text": "We just mass-deleted 11,000 lines of code from Terracotta...",
      "created_at": 1774474600847,
      "posted_ago": "3d ago",
      "likes": 1265,
      "comments": 151,
      "reposts": 84,
      "media_type": "video",
      "media_url": "",
      "is_repost": false
    }
  ]
}

Returns ~10 posts per page. Pass the pagination_token from the response to fetch the next page. Keep paginating until has_more is false. Each page costs 1 credit.

The media_type field can be "none", "image", "video", "carousel", or "article". The created_at timestamp is in milliseconds (Unix epoch).

Get Reactions

Retrieve reactions on a specific post.

POST /v1/reactions
ParameterTypeRequiredDescription
post_urlstringYesPost URL
pagenumberNoPage number (default 1)

Example Response

200 OK
{
  "page": 1,
  "total": 842,
  "has_more": true,
  "reactions": [
    {
      "name": "Tomás Garza",
      "headline": "Founding eng @ Campfire · prev Vercel",
      "profile_url": "https://www.linkedin.com/in/tomasgarza",
      "profile_id": "ACoAAD4x5yZaBcDeFgHiJkLmNoPqRsTuVw",
      "profile_picture": "https://media.licdn.com/dms/image/v2/D5603AQ...",
      "reaction_type": "LIKE"
    }
  ]
}

Reaction types include LIKE, CELEBRATE, LOVE, INSIGHTFUL, FUNNY, and SUPPORT. Use has_more to paginate through all reactions.

Get Comments

Retrieve comments on a specific post. Returns top-level comments sorted by relevance, with nested replies.

POST /v1/comments
ParameterTypeRequiredDescription
post_urlstringYesPost URL
pagenumberNoPage number (default 1, 10 comments per page)

Example Response

200 OK
{
  "page": 1,
  "total": 127,
  "has_more": true,
  "comments": [
    {
      "name": "Tomás Garza",
      "headline": "Founding eng @ Campfire · prev Vercel",
      "profile_url": "https://www.linkedin.com/in/tomasgarza",
      "profile_id": "ACoAAD4x5yZaBcDeFgHiJkLmNoPqRsTuVw",
      "profile_picture": "https://media.licdn.com/dms/image/v2/D5603AQ...",
      "text": "This is exactly what we did at Vercel in 2021...",
      "created_at": 1774474600847,
      "posted_ago": "2d ago",
      "likes": 24,
      "reply_count": 5,
      "is_author": false,
      "edited": false,
      "pinned": false,
      "replies": [
        {
          "name": "Marcela Vidal",
          "headline": "CTO @ Terracotta",
          "profile_url": "https://www.linkedin.com/in/marcela-vidal",
          "profile_id": "ACoAAC1a2bCdEfGhIjKlMnOpQrStUvWxYz",
          "is_author": true,
          "text": "Totally — we learned this the hard way",
          "likes": 8,
          "posted_ago": "1d ago"
        }
      ]
    }
  ]
}

Each comment includes a replies array with the most relevant nested replies (typically 1-3). The reply_count field shows the true total reply count. The is_author boolean indicates whether the commenter is the author of the original post. Use has_more to paginate through all top-level comments.

Enrich Company

Look up a company by URL. Returns structured company data.

POST /v1/company
ParameterTypeRequiredDescription
urlstringYesCompany URL to enrich

Example Response

200 OK
{
  "name": "Campfire",
  "universal_name": "campfire-dev",
  "company_id": 84295321,
  "linkedin_url": "https://www.linkedin.com/company/campfire-dev",
  "website": "https://campfire.dev",
  "description": "Campfire replaces your internal tools sprawl...",
  "industries": ["Software Development"],
  "company_type": "Privately Held",
  "headquarters": "Berlin, Berlin, Germany",
  "founded_year": 2021,
  "employee_count": 12,
  "employee_range": "11-50",
  "follower_count": 1847,
  "specialities": ["internal tools", "developer tools", ...],
  "logo": "https://media.licdn.com/dms/image/v2/C560BAQ...",
  "phone": null,
  "tagline": "Internal tools that don't make you mass email the eng team"
}

List Employees

List employees at a company. Returns up to 49 results per page, with a maximum of 1,000 total results.

POST /v1/employees
ParameterTypeRequiredDescription
urlstringYesCompany URL
pagenumberNoPage number (default 1, 49 per page)

Example Response

200 OK
{
  "page": 1,
  "total": 228,
  "has_more": true,
  "employees": [
    {
      "name": "Noa Cavalcante",
      "headline": "Senior Engineer @ Campfire",
      "location": "Berlin, Germany",
      "profile_url": "https://www.linkedin.com/in/noa-cavalcante",
      "profile_id": "ACoAADz-uYYBRAmY1S_WF1VsQjCx9woYvJgTXEw",
      "profile_picture": "https://media.licdn.com/dms/image/v2/D4E03AQ..."
    }
  ]
}

Returns up to 49 employees per page. Use has_more to paginate. Maximum 1,000 total results per company. The profile_id matches across all endpoints.

Check Usage

Returns your current usage, limits, and rate limit info.

GET /v1/usage

Example Response

200 OK
{
  "plan": "growth",
  "credits": {
    "remaining": 37550,
    "total": 50000,
    "resets_at": "2026-04-15T00:00:00Z"
  },
  "rate_limit": {
    "requests_per_minute": 300
  }
}

Rate Limits

Rate limits are enforced per API key based on your plan. Limits reset every minute on a sliding window.

PlanRequests / monthRequests / min
Starter10,000100
Growth50,000300
Pro200,000600

When you hit a rate limit, the API returns 429 Too Many Requests with a Retry-After header.

Errors

Enrichkit uses standard HTTP status codes. Errors return a JSON body with a message field.

StatusMeaning
200Success
400Bad request — invalid JSON or missing required field
401Invalid, missing, or revoked API key
403No active plan, or monthly quota exhausted
429Rate limit exceeded — too many requests per minute
502Upstream error — bad response from data source
503Upstream unreachable — try again shortly

Error Response

403 Forbidden
{
  "error": "quota_exceeded",
  "message": "No credits remaining. Upgrade your plan for more requests.",
  "credits": 0,
  "plan": "starter"
}

AI Integration (MCP)

Connect Enrichkit directly to AI tools like Claude, Cursor, and others via MCP (Model Context Protocol). Once connected, your AI assistant can look up profiles, companies, posts, and more — just by asking.

Claude Chat

Go to Settings → Connectors → Add custom connector and enter:

Server URL
https://enrichkit.dev/mcp?api_key=ek_your_api_key_here

Claude Code

Terminal
# Add with header auth
claude mcp add --transport http enrichkit https://enrichkit.dev/mcp \
  --header "X-API-Key: ek_your_api_key_here"

Cursor

Add to .cursor/mcp.json in your project:

.cursor/mcp.json
{
  "mcpServers": {
    "enrichkit": {
      "url": "https://enrichkit.dev/mcp",
      "type": "http",
      "headers": {
        "X-API-Key": "ek_your_api_key_here"
      }
    }
  }
}

Available Tools

ToolDescription
lookup_profileLook up a professional profile by URL
lookup_companyLook up a company by URL
get_postsGet recent posts from a profile or company
get_reactionsGet reactions on a post
get_commentsGet comments on a post
get_employeesList employees at a company
check_usageCheck your credits and rate limits

Each tool call uses 1 credit, same as a regular API request. Rate limits and billing apply as normal.