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.

  1. 01

    Create a dedicated key

    Choose full access, read-only, or custom scopes.

  2. 02

    Store the secret

    The full value won't be shown again after it's created.

  3. 03

    Test /me

    The read is free and confirms authentication immediately.

curl
curl "https://app.yadulink.com/api/v1/me" \
  -H "Authorization: Bearer yd_xxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Accept: application/json"
Reply
{
  "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
ScopeAllows
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.

OperationCategoryCredits

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
LinkedIn 2

Actualiser une page de fil LinkedIn

feed_refresh
LinkedIn 2

Actualiser une source de signaux LinkedIn

linkedin_signal_refresh
LinkedIn 2

Aimer un post

post_like
LinkedIn 2

Analyser un profil avec les filtres avancés

profile_filter_read
LinkedIn 2

Lire les posts d’un profil

profile_post_read
LinkedIn 2

Lire une page d’engagements

post_engagement_page_read
LinkedIn 2

Visiter un profil

profile_visit
LinkedIn 2

Commenter un post

post_comment
LinkedIn 8

Envoyer un message

send_message
LinkedIn 10

Envoyer une invitation

send_connection_request
LinkedIn 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.

POST /actions/send_message/jobs
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…"
  }'
ActionScopeLimit/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

EndpointScopeCost
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

EndpointScopeCost
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

EndpointScopeCost
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

EndpointScopeCost
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

EndpointScopeCost
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

01

Pick the signal

Start from the event or object that should leave Yadulink: reply, accepted invitation, profile visit, warm lead, list, or sequence.

02

Choose the scope

Grant only the read or action scope needed for the integration before adding more automation.

03

Trace the result

Log the key, account, object, status, idempotency key, and next action so each API operation can be reviewed.