Base URL
All API requests go to:How a request works
Every request is aPOST with a JSON body, an Authorization header, a Content-Type header, and a User-Agent header:
User-Agent can be any non-empty value — MoltSets doesn’t validate its contents, only that it’s present. Requests without one are rejected with a 403 (forbidden). See Errors.How a response works
Every call that completes returns HTTP200 with a consistent envelope:
results— the data returned by the tool. Empty, or with its fields set tonull, when no data is found.status—"ok"when the tool found data,"not_found"when it completed but matched nothing.metadata.fair_use— your remaining record headroom in the 5-hour and 1-week windows, and when each resets.metadata.tokens_used— credits consumed. Always0when no data is returned. Sent on token-bound (free) accounts only — accounts on an unlimited plan omit it.metadata.tokens_remaining— your remaining credit balance after this request. Token-bound accounts only.metadata.personal_email_restricted— present andtrueonly when the call withheld personal-email data because your plan doesn’t include that surface. Read the missing field as a plan boundary, not as absent data.metadata.phone_tokens_used/metadata.phone_tokens_remaining—linkedin_to_mobile_phoneonly; no other tool reports phone tokens.
status, not on the HTTP code.
Reading an outcome
Every call ends in one of three outcomes:
A not-found is a normal result, not a failure. The tool ran, the lookup was clean, and the data simply isn’t on file for that input — so nothing is charged. It still counts as one request against your Fair Use requests limit.
200 and its body is the per-item report — each entry carries its own status, so a batch of 100 where 12 matched returns 12 hits and 88 misses in one 200. A batch where nothing matched is still 200 with status: "not_found", not an error.
This changed. Lookups that found nothing used to return
404. They now return 200 with status: "not_found", on single calls and batches alike. If your integration treats a 404 as “no data”, switch it to read status — the only 404 the API still returns is tool_not_found, meaning the tool name in the URL is unknown or retired.Reading the outcome without parsing the body
Every tool response also carries anX-MoltSets-Outcome header — ok, not_found, or the error code. Proxies, log pipelines, and clients that would rather not parse JSON can branch on it directly. It is absent on requests that ran no tool, such as an auth failure.
Errors
Errors use a single shape on both REST and MCP:error.code, not on the message text.
Nothing is charged on an error.
When a call returns a 500
A500 with internal_error means the call couldn’t complete. Usually the endpoint is temporarily unavailable, but an unusually large or heavy request can also fail this way:
Plans
Records are the data rows returned; requests are capped separately — see Rate Limits.
Phone tokens for
linkedin_to_mobile_phone aren’t included in any plan. They’re sold as a separate monthly subscription, available on paid plans only — see Phone tokens.
linkedin_to_personal_email_usa and linkedin_to_best_personal_email_usa are not available on every plan — access is set by price tier. Call get_account and read personal_email_available to know where yours stands. Both return US records only — non-US records are filtered out, so a non-US profile comes back as a not_found.Calls from an account without access return 403 with:email_to_maid, business_email_to_sha256, and linkedin_to_sha256 are not available on the $397 / month and $997 / month plans. Calls from those plans return 403 with plan_restricted. It’s a plan condition — retrying or topping up tokens won’t clear it.Choosing a plan
The right plan depends on how fast you need results. Higher rate limits mean faster processing — the difference between waiting an hour and wrapping up in minutes.More information
For more information on our plans, upgrading and downgrading processes, please refer to our support documentation at support.moltsets.com.Available tools
*
linkedin_to_personal_email_usa and linkedin_to_best_personal_email_usa are not available on every plan — access is set by price tier. Call get_account and read personal_email_available to know where yours stands. See Plans for the error they return. Without access, use linkedin_to_business_email instead.Both return US records only — non-US records are filtered out, so a non-US profile comes back as a not_found.† Not available on the $397 / month and $997 / month plans. See Plans.
Switch to the
_usa tools. The personal-email tools were previously named linkedin_to_personal_email and linkedin_to_best_personal_email. To migrate, add _usa to the end of the tool or route name — same data, same format, with non-US records now filtered out. The old names still work for now but will be retired in the near future — switch to the _usa names before then.What to do next
Authentication
Get your API key and learn how to authenticate requests.
Rate Limits
Understand the limits that apply to all plans.
