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.
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 |
|---|---|---|
|
Créer une séquence sequence_create
|
Automatisation | 5 |
|
Créer un lead lead_create
|
Données | 1 |
|
Créer une liste list_create
|
Données | 1 |
|
Modifier un lead lead_update
|
Données | 1 |
|
Modifier une liste list_update
|
Données | 1 |
|
Supprimer un lead lead_delete
|
Données | 1 |
|
Supprimer une liste list_delete
|
Données | 1 |
|
Actualiser les statistiques d’un post post_stats_refresh
|
2 | |
|
Actualiser une page de fil LinkedIn feed_refresh
|
2 | |
|
Actualiser une source de signaux LinkedIn linkedin_signal_refresh
|
2 | |
|
Aimer un post post_like
|
2 | |
|
Analyser un profil avec les filtres avancés profile_filter_read
|
2 | |
|
Lire les posts d’un profil profile_post_read
|
2 | |
|
Lire une page d’engagements post_engagement_page_read
|
2 | |
|
Visiter un profil profile_visit
|
2 | |
|
Commenter un post post_comment
|
8 | |
|
Envoyer un message send_message
|
10 | |
|
Envoyer une invitation send_connection_request
|
10 | |
|
Publier un post LinkedIn 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": "Bonjour…"
}'
| 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.
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
/prospect-radar/schema
Read the Yadulink SaaS prospect radar scoring contract. |
leads:read
|
0 |
|
GET
/prospect-radar/summary
Read SaaS radar pipeline totals and configured LinkedIn accounts. |
leads:read
|
0 |
|
GET
/prospect-radar/accounts
List internal LinkedIn accounts configured for radar assignment. |
leads:read
|
0 |
|
POST
/prospect-radar/accounts
Create or update an internal LinkedIn account for radar assignment. |
leads:write
|
0 |
|
POST
/prospect-radar/candidates/bulk
Ingest sourced SaaS prospects and calculate server-side intent scores. |
leads:write
|
0 |
|
POST
/prospect-radar/discovery/linkedin
Run a bounded read-only LinkedIn people search for radar discovery. |
leads:read
|
0 |
|
POST
/prospect-radar/discovery/enrich-linkedin
Resolve up to 20 exact public LinkedIn identifiers through a connected internal account. |
leads:read
|
0 |
|
GET
/prospect-radar/candidates
List scored SaaS radar candidates. |
leads:read
|
0 |
|
POST
/prospect-radar/queue/claim
Claim the daily deduplicated prospect queue across active LinkedIn accounts. |
leads:write
|
0 |
|
GET
/prospect-radar/assignments
List per-account radar lifecycle assignments. |
leads:read
|
0 |
|
POST
/prospect-radar/assignments/digest-delivered
Acknowledge radar assignments only after their daily digest was delivered. |
leads:write
|
0 |
|
POST
/prospect-radar/invitations/reconcile
Match Unipile sent invitations with profiles previously proposed by the radar. |
leads:write
|
0 |
|
POST
/prospect-radar/invitations/reconcile-live
Fetch pending invitations through Yadulink and match radar assignments without exposing Unipile credentials. |
leads:write
|
0 |
|
POST
/prospect-radar/assignments/{assignment_id}/state
Record a reviewed radar lifecycle transition without sending a LinkedIn action. |
leads:write
|
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.
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.