Check InMail Seat
curl --request POST \
--url https://api.linkupapi.com/v2/profiles \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"account_id": "<string>",
"action": "<string>",
"params": {
"profile": "<string>"
}
}
'import requests
url = "https://api.linkupapi.com/v2/profiles"
payload = {
"account_id": "<string>",
"action": "<string>",
"params": { "profile": "<string>" }
}
headers = {
"x-api-key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({account_id: '<string>', action: '<string>', params: {profile: '<string>'}})
};
fetch('https://api.linkupapi.com/v2/profiles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.linkupapi.com/v2/profiles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'account_id' => '<string>',
'action' => '<string>',
'params' => [
'profile' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.linkupapi.com/v2/profiles"
payload := strings.NewReader("{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"profile\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.linkupapi.com/v2/profiles")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"profile\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.linkupapi.com/v2/profiles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"profile\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"seat_status": "ok",
"can_send_inmail": true,
"open_profile_badge_visible": true,
"inmail_credits": 149,
"linkedin_code": null,
"message": "The seat can send InMails.",
"checked_at": "2026-09-23T09:33:48Z"
},
"metadata": {
"action": "check_inmail_seat",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-09-23T09:33:48Z"
}
}
{
"success": true,
"data": {
"seat_status": "monthly_limit",
"can_send_inmail": false,
"open_profile_badge_visible": false,
"inmail_credits": 57,
"linkedin_code": "INMAIL_MONTHLY_FUSE_LIMIT",
"message": "LinkedIn has reached the monthly InMail limit on this Sales Navigator seat (INMAIL_MONTHLY_FUSE_LIMIT). It resets with the seat's monthly cycle; remaining InMail credits are not the cause.",
"checked_at": "2026-09-23T09:34:17Z"
},
"metadata": {
"action": "check_inmail_seat",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-09-23T09:34:17Z"
}
}
{
"success": false,
"error": {
"code": "CHANNEL_ERROR",
"message": "No Sales Nav license found for this account"
},
"metadata": {
"action": "check_inmail_seat",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-09-23T09:34:17Z"
}
}
Profiles
Check InMail Seat
Know whether a Sales Nav seat can send InMails right now, without sending one.
POST
/
v2
/
profiles
Check InMail Seat
curl --request POST \
--url https://api.linkupapi.com/v2/profiles \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"account_id": "<string>",
"action": "<string>",
"params": {
"profile": "<string>"
}
}
'import requests
url = "https://api.linkupapi.com/v2/profiles"
payload = {
"account_id": "<string>",
"action": "<string>",
"params": { "profile": "<string>" }
}
headers = {
"x-api-key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({account_id: '<string>', action: '<string>', params: {profile: '<string>'}})
};
fetch('https://api.linkupapi.com/v2/profiles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.linkupapi.com/v2/profiles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'account_id' => '<string>',
'action' => '<string>',
'params' => [
'profile' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.linkupapi.com/v2/profiles"
payload := strings.NewReader("{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"profile\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.linkupapi.com/v2/profiles")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"profile\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.linkupapi.com/v2/profiles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"profile\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"seat_status": "ok",
"can_send_inmail": true,
"open_profile_badge_visible": true,
"inmail_credits": 149,
"linkedin_code": null,
"message": "The seat can send InMails.",
"checked_at": "2026-09-23T09:33:48Z"
},
"metadata": {
"action": "check_inmail_seat",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-09-23T09:33:48Z"
}
}
{
"success": true,
"data": {
"seat_status": "monthly_limit",
"can_send_inmail": false,
"open_profile_badge_visible": false,
"inmail_credits": 57,
"linkedin_code": "INMAIL_MONTHLY_FUSE_LIMIT",
"message": "LinkedIn has reached the monthly InMail limit on this Sales Navigator seat (INMAIL_MONTHLY_FUSE_LIMIT). It resets with the seat's monthly cycle; remaining InMail credits are not the cause.",
"checked_at": "2026-09-23T09:34:17Z"
},
"metadata": {
"action": "check_inmail_seat",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-09-23T09:34:17Z"
}
}
{
"success": false,
"error": {
"code": "CHANNEL_ERROR",
"message": "No Sales Nav license found for this account"
},
"metadata": {
"action": "check_inmail_seat",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-09-23T09:34:17Z"
}
}
Overview
LinkedIn puts a monthly fuse on every Sales Nav seat, independent of its remaining InMail credits: once tripped, every InMail is refused withINMAIL_MONTHLY_FUSE_LIMIT, and it lifts on LinkedIn’s own schedule. This action tells you the seat’s state before you queue sends, so you can route leads to a seat that can actually deliver.
It also reports whether the seat currently sees the Open Profile badge (see Check InMail) and its InMail credit balance.
This endpoint consumes 1 credit. Nothing is sent: the fuse is probed with an empty message LinkedIn refuses before it could ever deliver. Requires a Sales Nav seat on the account. Ignore this if you’re on per-seat pricing: usage is unlimited.
Request
string
required
Your API key for authentication.
string
required
The unique identifier of the account to use. Must have a Sales Nav seat.
string
required
Must be
"check_inmail_seat".object
Show params properties
Show params properties
string
Optional. A lead in the seat’s network (profile URL, slug, member id or Sales Nav reference) to probe against. When omitted, the API picks one itself.
Response
boolean
Indicates whether the request was successful.
object
Show data properties
Show data properties
string
ok (InMails go through), monthly_limit (LinkedIn’s monthly fuse is tripped), under_review (LinkedIn has frozen the Sales Nav account; the member must clear it on linkedin.com) or rate_limited (a passing throttle, retry in a few minutes).boolean
true only when seat_status is ok.boolean | null
Whether the seat currently sees the Open Profile badge. When
false, Check InMail and Sales Nav search results from this seat report every member as not open and must not be trusted.integer | null
InMail credits left on the seat. Not what decides
seat_status: a fused seat keeps its credits.string | null
LinkedIn’s own code when the seat is refused, e.g.
INMAIL_MONTHLY_FUSE_LIMIT, ACCOUNT_UNDER_REVIEW.string
Human-readable explanation of the state.
string
ISO 8601 timestamp of the probe.
{
"success": true,
"data": {
"seat_status": "ok",
"can_send_inmail": true,
"open_profile_badge_visible": true,
"inmail_credits": 149,
"linkedin_code": null,
"message": "The seat can send InMails.",
"checked_at": "2026-09-23T09:33:48Z"
},
"metadata": {
"action": "check_inmail_seat",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-09-23T09:33:48Z"
}
}
{
"success": true,
"data": {
"seat_status": "monthly_limit",
"can_send_inmail": false,
"open_profile_badge_visible": false,
"inmail_credits": 57,
"linkedin_code": "INMAIL_MONTHLY_FUSE_LIMIT",
"message": "LinkedIn has reached the monthly InMail limit on this Sales Navigator seat (INMAIL_MONTHLY_FUSE_LIMIT). It resets with the seat's monthly cycle; remaining InMail credits are not the cause.",
"checked_at": "2026-09-23T09:34:17Z"
},
"metadata": {
"action": "check_inmail_seat",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-09-23T09:34:17Z"
}
}
{
"success": false,
"error": {
"code": "CHANNEL_ERROR",
"message": "No Sales Nav license found for this account"
},
"metadata": {
"action": "check_inmail_seat",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-09-23T09:34:17Z"
}
}
Example
{
"account_id": "your-account-id",
"action": "check_inmail_seat",
"params": {}
}
Was this page helpful?