Aller au contenu principal

Actions et jobs

Les actions LinkedIn sensibles ne sont pas exécutées comme de simples requêtes synchrones. Elles sont mises en file sous forme de jobs afin de protéger votre compte LinkedIn, gérer les délais, éviter les doublons et rembourser les crédits si l'action ne peut pas aboutir.

Pourquoi des jobs ?

Un job est nécessaire quand l'action :

  • touche LinkedIn ;
  • peut prendre du temps ;
  • doit respecter un budget de sécurité ;
  • peut être reprogrammée ;
  • doit réserver puis confirmer ou rembourser des crédits.

Exemples : visite de profil, like, commentaire, demande de connexion, message.

Opérations disponibles

OpérationDescriptionScope requisCoût
profile_visitVisiter un profil LinkedInprofiles:write2 crédits
post_likeLiker un post LinkedInposts:write2 crédits
post_commentCommenter un post LinkedInposts:write8 crédits
send_connection_requestEnvoyer une demande de connexionconnections:write10 crédits
send_messageEnvoyer un message à un contact éligiblemessages:write10 crédits

Chaque création de job exige aussi jobs:write.

Lire les actions disponibles

curl https://app.yadulink.com/api/v1/actions \
-H "Authorization: Bearer yd_votre_cle_api"

Cet endpoint renvoie les opérations disponibles, le scope requis, le coût unitaire et l'état du budget de sécurité.

Cibles acceptées

Pour une action sur profil, indiquez au moins un identifiant de cible :

ChampUsage
lead_idID du lead Yadulink
profile_idID de profil interne si disponible
provider_idID fournisseur LinkedIn si disponible
public_identifierIdentifiant public LinkedIn
profile_urlURL de profil LinkedIn
linkedin_urlAlias accepté pour l'URL LinkedIn

Utilisez lead_id quand vous le pouvez. C'est le plus stable dans Yadulink.

Créer un job

Endpoint :

POST /actions/{operation}/jobs

Visite de profil

curl https://app.yadulink.com/api/v1/actions/profile_visit/jobs \
-X POST \
-H "Authorization: Bearer yd_votre_cle_api" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: profile-visit-lead-123" \
-d '{
"lead_id": 123
}'

Demande de connexion

curl https://app.yadulink.com/api/v1/actions/send_connection_request/jobs \
-X POST \
-H "Authorization: Bearer yd_votre_cle_api" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: connection-request-lead-123" \
-d '{
"lead_id": 123,
"connection_note": "Bonjour Ada, votre travail sur les moteurs analytiques m'intéresse beaucoup."
}'

Message

curl https://app.yadulink.com/api/v1/actions/send_message/jobs \
-X POST \
-H "Authorization: Bearer yd_votre_cle_api" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: send-message-lead-123-step-1" \
-d '{
"lead_id": 123,
"message": "Bonjour Ada, je me permets de vous écrire car votre activité semble proche de nos clients actuels."
}'

Like de post

curl https://app.yadulink.com/api/v1/actions/post_like/jobs \
-X POST \
-H "Authorization: Bearer yd_votre_cle_api" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: post-like-urn-123" \
-d '{
"post_id": "urn:li:activity:123"
}'

Commentaire de post

curl https://app.yadulink.com/api/v1/actions/post_comment/jobs \
-X POST \
-H "Authorization: Bearer yd_votre_cle_api" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: post-comment-urn-123" \
-d '{
"post_id": "urn:li:activity:123",
"comment": "Très intéressant, merci pour le partage."
}'

Cycle des crédits

Quand vous créez un job :

  1. Yadulink vérifie le scope et le budget de sécurité.
  2. Yadulink vérifie que le solde disponible couvre le coût.
  3. Yadulink réserve les crédits.
  4. Le job est mis en file.
  5. Si le job réussit, les crédits réservés sont confirmés.
  6. Si le job échoue définitivement ou est annulé, les crédits réservés sont remboursés.

Le solde available baisse dès la réservation. Le solde reserved augmente tant que le job n'est pas terminé.

Statuts de job

StatutSensCrédits
queuedEn attente d'exécutionRéservés
runningExécution en coursRéservés
completedAction terminéeConfirmés
failedÉchec définitifRemboursés si réservés
canceledAnnuléRemboursés si possible

Lire un job

curl https://app.yadulink.com/api/v1/jobs/job_123 \
-H "Authorization: Bearer yd_votre_cle_api"

La réponse contient notamment :

  • status ;
  • operation ;
  • result si disponible ;
  • error si le job a échoué ;
  • retry_after_at si Yadulink recommande d'attendre ;
  • credits.reserved, credits.committed, credits.refunded.

Annuler un job

curl https://app.yadulink.com/api/v1/jobs/job_123/cancel \
-X POST \
-H "Authorization: Bearer yd_votre_cle_api" \
-H "Idempotency-Key: cancel-job-123"

Une annulation rembourse les crédits uniquement si le job n'a pas déjà été finalisé.

Budgets de sécurité

Les budgets de sécurité sont séparés des crédits. Ils évitent qu'un workflow n8n ou un script lance trop d'actions LinkedIn.

OpérationLimite quotidienneLimite hebdomadaireIntervalle minimum
profile_visit80Aucun120 s
post_like80Aucun60 s
post_comment80Aucun90 s
send_connection_request6020090 s
send_message80Aucun60 s

Si le budget n'est pas disponible, l'API renvoie public_action_budget_unavailable avec un détail comme daily_limit_reached, weekly_limit_reached ou last_action_too_recent.

Retry et reprogrammation

Certains échecs sont temporaires : session LinkedIn momentanément indisponible, action trop récente, fenêtre de sécurité fermée ou dépendance externe lente.

Dans ce cas :

  • le job peut rester en attente ou être reprogrammé ;
  • retry_after_at ou retry_after_seconds indique quand réessayer ;
  • les crédits restent réservés ;
  • aucun remboursement n'est fait tant que le job n'est pas finalement échoué ou annulé.

Bonnes pratiques

  • Utilisez toujours une clé d'idempotence pour créer un job.
  • Testez d'abord avec un seul lead.
  • Lisez GET /actions avant un gros volume pour vérifier le budget.
  • Préférez les webhooks job.completed, job.failed et job.canceled au polling intensif.
  • Ajoutez des pauses dans n8n quand vous bouclez sur plusieurs prospects.
  • Ne lancez pas plusieurs workflows qui contactent le même lead au même moment.