First-party app
LinkupAPI

LinkupAPI

LinkedIn, WhatsApp and email outreach, lead sourcing, messaging, posting and email enrichment through LinkupAPI's V2 API.

stable Customer Relationship ManagementMarketingSocial Media

About

LinkupAPI ships in the w6w first-party pack. It declares 54 actions, 3 health checks, and the host runs its code in a sandbox that never sees the credential.

App id
io.w6w.linkupapi
Version
0.1.0
Author
w6w
Licence
MIT
Categories
Customer Relationship Management · Marketing · Social Media

Overview

LinkupAPI puts one API in front of LinkedIn, WhatsApp and email for sales and recruiting automation. You connect a channel account once in LinkupAPI’s own dashboard, and every call from a workflow names that account by its account_id, so w6w holds only the API key and never a LinkedIn password or session.

This app covers the V2 surface: reading and searching profiles, companies and posts; sending connection requests and managing received, sent and withdrawn invitations; sending, reading and replying to LinkedIn, WhatsApp and email messages; publishing, reacting to, commenting on and reposting content; recruiter job postings, candidates and CVs; email finding, validation and reverse lookup; and webhooks with a pollable event stream for reacting to replies and accepted invitations.

LinkupAPI drives real LinkedIn accounts on the account holder’s behalf, which LinkedIn’s terms restrict, and the vendor’s own guidance is to stay well under LinkedIn’s limits (about 100 invitations a day on a paid account). Credits are metered per call, and a credit-balance health check shows how many remain.

Build with LinkupAPI

Three routes to the same 54 actions. The Workflow tab is generated from LinkupAPI's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.

Get Account

account-get

Read one connected account: status, checkpoint state, country and Sales Navigator seat.

List Accounts

account-list

List the channel accounts (LinkedIn, WhatsApp, email) connected to the API key, with their status and the account_id every other action needs.

Get Candidate CV

candidate-cv-get

Read the CV of one applicant.

Reply to Comment

comment-reply

Reply to a comment on a post. trackingId, profileUrn and commentUrn come from Get Post Comments.

Get Company

company-get

Read a LinkedIn company page: description, size, industry, headquarters.

Search Companies

company-search

Search LinkedIn company pages by keyword, location, sector and size.

Send Connection Request

connection-invite

Send a connection request, optionally with a note.

List Connections

connection-list

List the account's connections, newest first.

Get Conversation

conversation-get

Read the messages of one conversation, found by conversation id, profile URL or phone number.

Get Credit Balance

credits-get

Read the credits remaining on the LinkupAPI account. Consumes no credits.

Find Email

email-find

Find a professional email address from a name and company, or from a LinkedIn profile URL.

Reverse Email Lookup

email-reverse

Identify a person from a professional email address.

Validate Email

email-validate

Check whether an email address is valid and deliverable.

Get Feed

feed-get

Read the home feed of the connected account.

List Inbox

inbox-list

List conversations in the account's inbox.

Accept Invitation

invitation-accept

Accept a pending received connection invitation.

Decline Invitation

invitation-decline

Decline a pending received connection invitation.

List Invitations

invitation-list

List pending received invitations.

List Sent Invitations

invitation-sent-list

List invitations the account has sent.

Check Invitation Status

invitation-status-get

Check the connection or invitation state between the connected account and a member.

Withdraw Invitation

invitation-withdraw

Withdraw a pending sent invitation. LinkedIn only lets you invite the same member again about three weeks later.

Get Job Candidates

job-candidates-list

List the candidates who applied to a job posting.

Close Job Posting

job-close

Close an active job posting.

Create Job Posting

job-create

Create a job posting in draft state; publish it with Publish Job Posting.

Get Job Posts

job-list

List the job postings of the recruiter account, or fetch one by id.

Publish Job Posting

job-publish

Publish a draft job posting.

List API Logs

log-list

Browse the API call history, one entry per request, with the credits each consumed.

Send Message or Email

message-send

Send a LinkedIn message or InMail, a WhatsApp message, or an email from a connected account. Pass the recipient field that matches the account's platform.

Get Network Recommendations

network-recommendations-list

List people the account may know.

Search People

people-search

Search LinkedIn members by keyword, title, company, location, school, industry or network degree.

Comment on Post

post-comment

Add a comment to a post, optionally as a company page you administer.

Get Post Comments

post-comments-list

List the comments on a post (up to 1000 per call).

Create Post

post-create

Publish a post with text and optionally an image, video, document or carousel.

Create Company Post

post-create-company

Publish a post on a company page the account administers.

Get Post

post-get

Read one post from its URL.

React to Post

post-react

React to a post, optionally as a company page you administer.

Get Post Reactions

post-reactions-list

List the reactions on a post (up to 1000 per call).

Repost

post-repost

Repost a post to the account's feed.

Search Posts

post-search

Search posts by keyword with author, date and content-type filters.

Get Profile Comments

profile-comments-list

List the comments a member wrote on posts and articles.

Get Contact Info

profile-contact-get

Read the contact details a member shares with the connected account (email, phone, websites).

Get Profile

profile-get

Read the profile of any LinkedIn member by URL, public identifier or URN.

Get My Profile

profile-me

Read the profile of the connected account itself.

Get Profile Posts

profile-posts-list

List the posts a member published, newest first.

Get Profile Reactions

profile-reactions-list

List the reactions a member left on posts.

Get Profile Viewers

profile-viewers-list

List the people who recently viewed the connected account's profile.

Visit Profile

profile-visit

Visit a profile so the member sees a profile-view notification.

Create Webhook

webhook-create

Register a webhook for an account. Omit the URL for a hosted webhook read by polling. With enableSignature the response carries the signing secret once.

Delete Webhook

webhook-delete

Permanently delete a webhook.

Poll Webhook Events

webhook-events-list

Read the events stored for a webhook, the catch-up path for hosted and custom webhooks.

List Webhooks

webhook-list

List the webhooks registered for the API key.

Start Monitoring

webhook-start

Resume monitoring for a stopped webhook.

Stop Monitoring

webhook-stop

Stop monitoring for a webhook without deleting it.

Update Webhook

webhook-update

Change a webhook's URL, events, retry policy or pause it.

A workflow step names the app and the action, and the editor fills in the connection when you pick one. This is the Step shape from the workflow spec, carrying LinkupAPI's real ids.

{
  "manifestVersion": "2",
  "name": "linkupapi-example",
  "steps": [
    {
      "id": "account-get",
      "uses": {
        "app": "io.w6w.linkupapi",
        "action": "account-get",
        "connection": "conn_YOUR_CONNECTION_ID"
      },
      "with": {
        "accountId": "<accountId>"
      }
    }
  ]
}

Here are some of the things you can do

  • Get Account

    read
    account-get
  • List Accounts

    read
    account-list
  • Get Candidate CV

    read
    candidate-cv-get
  • Reply to Comment

    perform
    comment-reply
  • Get Company

    read
    company-get

+49 more actions available

Every app-specific value here is a blank you have to fill in. An app action is reached through the connection that authenticates it, so the address is a connection id, not the app id — and connections belong to your account, so a public page cannot know yours. Create one for LinkupAPI, then fill in the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the parameters that action declares. The call itself is real — the shape is transcribed from the studio's own snippet builder, which prints the same kind of blanks — but nothing in it is specific to LinkupAPI. The Workflow tab is where this app's real ids are.

Install
npm install @w6w/sdk
yarn add @w6w/sdk
pnpm add @w6w/sdk
deno add npm:@w6w/sdk
Code
import { W6wClient, isActionRun } from "@w6w/sdk";

// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();

const envelope = await client.run({
  urn: "conn_YOUR_CONNECTION_ID",
  action: "account-get",
  payload: {
    accountId: "<value>",
  },
});

if (isActionRun(envelope)) console.log(envelope.value);
Install the CLI
npm install -g @w6w/cli
CLI
w6w run conn_YOUR_CONNECTION_ID --action account-get --payload '{"accountId":"<value>"}'

Give an AI agent LinkupAPI — without giving it LinkupAPI's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.

One tool call
{
  "name": "w6w_invoke",
  "arguments": {
    "ref": "app:io.w6w.linkupapi#account-get",
    "input": {
      "accountId": "<accountId>"
    }
  }
}

Every tool names its target with a single ref. The app: form above doesn't name a connection at all — the host resolves which of the caller's LinkupAPI connections to sign with, and refuses rather than guesses when the answer is ambiguous.

What the agent gets

Credentials it can't read

The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.

A tool surface scoped to the caller

Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.

A durable workflow in one call

Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.

Health-aware discovery

LinkupAPI's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.

The MCP surface is part of the hosted platform. LinkupAPI itself is MIT, and the runtime that executes it is source-available (FSL).

Request MCP access

Health checks

LinkupAPI declares its own checks, so its health is a property of the app rather than something the host guesses at.

service

LinkupAPI platform status

dependency

API reachable

Unauthenticated GET /v2/credits. LinkupAPI's JSON INVALID_API_KEY refusal passes: it proves the application is answering.

quota

Credit balance

Credits remaining, from GET /v2/credits. Free to call. Per-seat plans are unmetered; the balance still reads but is not a limit there.