Yadulink API · v1
Connect your tools to Yadulink with a clear API.
This reference covers authentication, credits, leads, asynchronous LinkedIn actions and webhooks. Start with the quickstart, then open only the scopes you need.
The full documentation is on docs.yadulink.com
This page summarizes the contract. The detailed guides and the endpoint reference generated from the OpenAPI schema are kept up to date there.
5 minutes
Quick start
Create a key from API management, copy it once, then check the connection with the free /me endpoint.
-
01
Create a dedicated key
Choose full access, read-only, or custom scopes.
-
02
Store the secret
The full value won't be shown again after it's created.
-
03
Test /me
The read is free and confirms authentication immediately.
curl "https://app.yadulink.com/api/v1/me" \
-H "Authorization: Bearer yd_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Accept: application/json"
{
"success": true,
"data": {
"id": 42,
"email": "[email protected]",
"api_access": {"eligible": true}
}
}
Authentication and scopes
Send the key in the Authorization header. An expired, suspended or revoked key is rejected. Use a separate key per tool to limit the impact of a revocation.
Authorization: Bearer yd_xxxxxxxxxxxxxxxxxxxxxxxx
| Scope | Allows |
|---|---|
account:read |
Reading the relevant resources |
credits:read |
Reading the relevant resources |
leads:read |
Reading the relevant resources |
leads:write |
Write or action in the relevant area |
lists:read |
Reading the relevant resources |
lists:write |
Write or action in the relevant area |
messages:read |
Reading the relevant resources |
messages:write |
Write or action in the relevant area |
profiles:write |
Write or action in the relevant area |
posts:write |
Write or action in the relevant area |
connections:write |
Write or action in the relevant area |
webhooks:manage |
Endpoint and webhook delivery management |
jobs:read |
Reading the relevant resources |
jobs:write |
Write or action in the relevant area |
mcp:self:profile:read |
Reading the relevant resources |
mcp:self:messages:read |
Reading the relevant resources |
mcp:self:messages:write |
Write or action in the relevant area |
mcp:self:outreach:read |
Reading the relevant resources |
mcp:self:outreach:write |
Write or action in the relevant area |
mcp:self:content:read |
Reading the relevant resources |
mcp:self:content:write |
Write or action in the relevant area |
mcp:self:credits:read |
Reading the relevant resources |
Credits and billing
All reads are free. Synchronous mutations are charged in the same transaction. Asynchronous actions hold their credits, then commit or refund them depending on the outcome.
| Operation | Category | Credits |
|---|---|---|
|
Create sequence sequence_create
|
Automation | 5 |
|
Create a lead lead_create
|
Data | 1 |
|
Create a list list_create
|
Data | 1 |
|
Delete a lead lead_delete
|
Data | 1 |
|
Delete a list list_delete
|
Data | 1 |
|
Edit a lead lead_update
|
Data | 1 |
|
Edit a list list_update
|
Data | 1 |
|
Analyse a profile with advanced filters profile_filter_read
|
2 | |
|
Like a post post_like
|
2 | |
|
Read a profile's posts profile_post_read
|
2 | |
|
Read an engagement page post_engagement_page_read
|
2 | |
|
Refresh a LinkedIn feed page feed_refresh
|
2 | |
|
Refresh a LinkedIn signal source linkedin_signal_refresh
|
2 | |
|
Refresh post statistics post_stats_refresh
|
2 | |
|
Visit a profile profile_visit
|
2 | |
|
Comment on a post post_comment
|
8 | |
|
Send a message send_message
|
10 | |
|
Send an invitation send_connection_request
|
10 | |
|
Publish a LinkedIn post linkedin_post_publish
|
Publication | 10 |
Monthly credits expire when the month rolls over. Purchased credits stay valid for 365 days. The batches expiring soonest are used first.
Actions and async jobs
LinkedIn actions return a job. Keep its identifier, poll its state, then handle completed, failed or canceled. Send a unique Idempotency-Key to avoid duplicates.
curl -X POST "https://app.yadulink.com/api/v1/actions/send_message/jobs" \
-H "Authorization: Bearer yd_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Idempotency-Key: message-prospect-123" \
-H "Content-Type: application/json" \
-d '{
"profile_url": "https://www.linkedin.com/in/prospect",
"message": "Hello…"
}'
| Action | Scope | Limit/day |
|---|---|---|
profile_visit |
profiles:write |
80 |
post_like |
posts:write |
80 |
post_comment |
posts:write |
80 |
send_connection_request |
connections:write |
60 |
send_message |
messages:write |
80 |
Endpoint reference
Responses always use the success, data, meta and error envelopes. Pagination accepts page and per_page, capped at 100 items.
This list gives the path, the required scope and the cost. For parameters, request bodies and response codes, open the generated reference.
Account and contract
| Endpoint | Scope | Cost |
|---|---|---|
|
GET
/me
Test authentication and retrieve the API key owner. |
— | 0 |
|
GET
/account/status
Check API eligibility, subscription access, and LinkedIn connection status. |
account:read
|
0 |
|
GET
/account/limits
Read rate limits, credit allowance, and action-job availability. |
account:read
|
0 |
|
GET
/developer/manifest
Machine-readable public API contract for integrations such as n8n. |
account:read
|
0 |
|
GET
/openapi.json
Public OpenAPI schema for the Yadulink Public API. |
— | 0 |
|
GET
/messages
List LinkedIn conversations synced to Yadulink. |
messages:read
|
0 |
|
GET
/messages/{message_id}
Retrieve one synced LinkedIn message. |
messages:read
|
0 |
|
GET
/zapier/poll/leads
Poll recently created leads, shaped for Zapier triggers. |
leads:read
|
0 |
|
GET
/zapier/poll/messages
Poll recently received messages, shaped for Zapier triggers. |
messages:read
|
0 |
|
POST
/zapier/subscribe
Register a Zapier REST hook subscription. |
webhooks:manage
|
0 |
|
DELETE
/zapier/unsubscribe/{webhook_id}
Remove a Zapier REST hook subscription. |
webhooks:manage
|
0 |
Credits
| Endpoint | Scope | Cost |
|---|---|---|
|
GET
/credits/balance
Read the current API credit balance. |
credits:read
|
0 |
|
GET
/credits/ledger
Read credit ledger entries with pagination and filters. |
credits:read
|
0 |
|
GET
/credits/overview
Read credit balance and consumption aggregates for a selected period. |
credits:read
|
0 |
|
GET
/credits/packs
List purchasable credit packs. Checkout must be started in the app session. |
credits:read
|
0 |
|
POST
/credits/packs/{pack_id}/checkout
Create a Stripe Checkout session for a credit pack from an authenticated app session. |
app_session
|
0 |
|
POST
/credits/quote
Preview the credit cost of an operation before creating it. |
credits:read
|
0 |
Leads and lists
| Endpoint | Scope | Cost |
|---|---|---|
|
GET
/lists
List lead lists. |
lists:read
|
0 |
|
POST
/lists
Create a lead list. |
lists:write
|
1 |
|
GET
/lists/{list_id}
Retrieve a lead list. |
lists:read
|
0 |
|
PUT
/lists/{list_id}
Update a lead list. |
lists:write
|
1 |
|
DELETE
/lists/{list_id}
Delete a lead list. |
lists:write
|
1 |
|
GET
/lists/{list_id}/leads
List leads from a specific list. |
leads:read
|
0 |
|
GET
/leads
List leads with filters and pagination. |
leads:read
|
0 |
|
GET
/leads/search
Search leads by query. |
leads:read
|
0 |
|
GET
/leads/{lead_id}
Retrieve a lead. |
leads:read
|
0 |
|
POST
/leads
Create a lead. |
leads:write
|
1 |
|
PUT
/leads/{lead_id}
Update a lead. |
leads:write
|
1 |
|
DELETE
/leads/{lead_id}
Delete a lead. |
leads:write
|
1 |
Actions and jobs
| Endpoint | Scope | Cost |
|---|---|---|
|
GET
/actions
List LinkedIn-side async actions available through the public API. |
account:read
|
0 |
|
POST
/actions/{operation}/jobs
Create an async job for a LinkedIn action. |
jobs:write<action required_scope>
|
Depending on the action |
|
GET
/jobs/{job_id}
Retrieve job status and result. |
jobs:read
|
0 |
|
POST
/jobs/{job_id}/cancel
Cancel a queued/running public API job and refund reserved credits when possible. |
jobs:write
|
0 |
Webhooks
| Endpoint | Scope | Cost |
|---|---|---|
|
GET
/webhooks
List webhook endpoints. |
webhooks:manage
|
0 |
|
GET
/webhooks/health
List unhealthy webhook endpoints and health counters. |
webhooks:manage
|
0 |
|
GET
/webhooks/{webhook_id}
Retrieve one webhook endpoint with health state. |
webhooks:manage
|
0 |
|
POST
/webhooks
Create a webhook endpoint. |
webhooks:manage
|
0 |
|
PUT
/webhooks/{webhook_id}
Update a webhook endpoint. |
webhooks:manage
|
0 |
|
POST
/webhooks/{webhook_id}/activate
Activate a webhook endpoint and clear failure state. |
webhooks:manage
|
0 |
|
POST
/webhooks/{webhook_id}/deactivate
Deactivate a webhook endpoint without deleting it. |
webhooks:manage
|
0 |
|
DELETE
/webhooks/{webhook_id}
Delete a webhook endpoint. |
webhooks:manage
|
0 |
|
POST
/webhooks/{webhook_id}/test
Queue a test webhook delivery. |
webhooks:manage
|
0 |
|
POST
/webhooks/{webhook_id}/rotate-secret
Rotate a webhook signing secret. |
webhooks:manage
|
0 |
|
GET
/webhooks/{webhook_id}/deliveries
Read recent webhook delivery attempts. |
webhooks:manage
|
0 |
|
GET
/webhooks/{webhook_id}/deliveries/{delivery_id}
Read one webhook delivery attempt with payload and response details. |
webhooks:manage
|
0 |
|
POST
/webhooks/{webhook_id}/deliveries/{delivery_id}/replay
Queue a replay of a previous webhook delivery with the same event id. |
webhooks:manage
|
0 |
Signed webhooks
Verify X-Yadulink-Signature using HMAC-SHA256 over timestamp.raw_json_payload. Reply quickly with a 2xx; temporary failures are retried and stay visible in the history.
Available events
lead.created
lead.status_changed
connection.accepted
radar.connection_accepted
radar.message_received
job.completed
job.failed
job.canceled
{
"id": "evt_01...",
"event": "lead.created",
"api_version": "v1",
"created_at": "2026-07-24T14:30:00Z",
"data": {"lead_id": 123}
}
Errors and diagnostics
Keep X-Request-ID in your logs. error.code stays stable for automations; error.message is for humans and error.details carries the useful context.
subscription_required
Active subscription required.
invalid_api_key
Key missing, invalid, expired or inactive.
insufficient_scope
The API key doesn't have the required scope.
insufficient_api_credits
Not enough credits.
idempotency_key_reused
Same idempotency key used with a different payload.
linkedin_account_required
A connected LinkedIn account is required to run the action.
public_action_budget_unavailable
Safety limit temporarily reached.
public_action_jobs_disabled
This action is temporarily unavailable.
Every response carries an X-Request-ID header. Keep it: it is the identifier support uses to find a specific call.
Verified API facts
What the public API page makes explicit.
This block frames the API as a controlled integration layer for LinkedIn signal workflows, CRM routing, webhooks, and AI agents.
Verified facts
Base endpoint
The public API page exposes https://app.yadulink.com/api/v1 as the API base and explains authentication, scopes, jobs, webhooks, and reporting workflows.
Workflow scope
The API connects searches, lists, actions, messages, analytics, and webhooks to internal systems without turning LinkedIn operations into a black box.
Control
API usage is positioned around minimal scopes, idempotency, action limits, logs, and event payloads that stay useful for CRM and AI agents.
Verification method
Pick the signal
Start from the event or object that should leave Yadulink: reply, accepted invitation, profile visit, warm lead, list, or sequence.
Choose the scope
Grant only the read or action scope needed for the integration before adding more automation.
Trace the result
Log the key, account, object, status, idempotency key, and next action so each API operation can be reviewed.