KARABA / Docs
← Match
Pool provider

Index IA partenaire

Le pool provider est conçu pour les partenaires à fort volume qui ne veulent pas transmettre de données personnelles mais acceptent de partager un index allégé et anonymisé. Karaba maintient un index vectorisé haute performance côté serveur.

🛡️
Données minimales — aucune donnée sensible obligatoire

L'index stocke skills, seniority, country et, optionnellement, un whatsapp_numberpour activer la diffusion. Nom, email et CV ne sont jamais requis. Les résultats retournent les external_id — c'est le partenaire qui fait la jointure avec ses données réelles.

📲
Diffusion WhatsApp disponible avec whatsapp_number

Ajoutez whatsapp_number lors du sync pour activer la diffusion. Utilisez POST /v1/jobs avec le champ provider_id : Karaba matche sur votre index et inclut le numéro WhatsApp dans chaque match — prêt pour POST /v1/jobs/{id}/broadcast.

Nom / Email / CV stockés Trust Score Diffusion WhatsApp (avec whatsapp_number) Index vectorisé persistant Mise à jour temps réel (webhook) Fort volume

Setup en 4 étapes

  1. 01Enregistrer le providerPOST /v1/providers — choisissez un provider_id stable (ex: "goafrica"). Une seule fois.
  2. 02Synchroniser l'indexPOST /v1/providers/{id}/sync — envoyez vos candidats avec skills, seniority, country et whatsapp_number (optionnel).
  3. 03Maintenir en temps réelPOST /v1/providers/{id}/webhook — événements candidate.created / updated / deleted au fil de l'eau.
  4. 04Diffuser sur WhatsAppPOST /v1/jobs avec provider_id, puis POST /v1/jobs/{id}/broadcast — les candidats avec whatsapp_number sont contactés.

Endpoints

POST/v1/providersmatch:read

Enregistrer un provider externe — une seule fois

Requête
{
  "provider_id": "goafrica",
  "name": "GoAfrica Online"
}
Réponse
{
  "provider_id": "goafrica",
  "name": "GoAfrica Online",
  "index_count": 0,
  "message": "Provider enregistré. Utilisez POST /v1/providers/{id}/sync pour indexer vos candidats."
}
POST/v1/providers/{provider_id}/syncmatch:read

Synchroniser l'index IA — bootstrap ou delta

Requête
{
  "candidates": [
    {
      "external_id": "ga_001",
      "skills": [
        "react",
        "typescript",
        "graphql"
      ],
      "seniority": "senior",
      "country": "Togo",
      "whatsapp_number": "+22891000001"
    },
    {
      "external_id": "ga_002",
      "skills": [
        "python",
        "django",
        "postgresql"
      ],
      "seniority": "mid",
      "country": "Côte d'Ivoire",
      "whatsapp_number": "+22507000002"
    },
    {
      "external_id": "ga_003",
      "skills": [
        "vue",
        "node",
        "mongodb"
      ],
      "seniority": "junior",
      "country": "Sénégal"
    }
  ]
}
Réponse
{
  "provider_id": "goafrica",
  "upserted": 3,
  "index_count": 1247,
  "last_sync_at": "2026-06-17T10:30:00Z"
}
POST/v1/providers/{provider_id}/webhookmatch:read

Mise à jour temps réel — candidat créé, modifié ou supprimé

Requête
{
  "event": "candidate.created",
  "candidate": {
    "external_id": "ga_004",
    "skills": [
      "flutter",
      "dart",
      "firebase"
    ],
    "seniority": "mid",
    "country": "Cameroun"
  }
}
Réponse
{
  "status": "indexed",
  "external_id": "ga_004"
}
POST/v1/match/runmatch:read

Lancer le matching sur l'index IA du provider

Requête
{
  "job": {
    "title": "Développeur React senior",
    "skills_required": [
      "react",
      "typescript"
    ]
  },
  "pool": {
    "type": "provider",
    "provider_id": "goafrica"
  },
  "limit": 5
}
Réponse
{
  "match_id": "provider_b2c3d4e5f6",
  "pool_type": "provider:goafrica",
  "total_results": 2,
  "results": [
    {
      "external_id": "ga_001",
      "match_score": 0.91,
      "trust_score": null,
      "location": "Togo",
      "skills": [
        "react",
        "typescript",
        "graphql"
      ]
    },
    {
      "external_id": "ga_002",
      "match_score": 0.62,
      "trust_score": null,
      "location": "Côte d'Ivoire",
      "skills": [
        "python",
        "django"
      ]
    }
  ],
  "cached": false
}
POST/v1/jobsjobs:write

Publier une offre avec matching + diffusion WhatsApp sur le pool provider

Requête
{
  "title": "Développeur React senior",
  "description": "Mission 6 mois, stack React/TypeScript.",
  "location": "Lomé, Togo",
  "provider_id": "goafrica"
}
Réponse
{
  "job_id": 14,
  "title": "Développeur React senior",
  "status": "matched",
  "total_matched": 2,
  "matches": [
    {
      "candidate_id": 1,
      "external_id": "ga_001",
      "full_name": null,
      "location": "Togo",
      "match_score": 91,
      "whatsapp_number": "+22891000001",
      "whatsapp_status": "not_sent",
      "pool_type": "provider:goafrica"
    },
    {
      "candidate_id": 2,
      "external_id": "ga_002",
      "full_name": null,
      "location": "Côte d'Ivoire",
      "match_score": 62,
      "whatsapp_number": "+22507000002",
      "whatsapp_status": "not_sent",
      "pool_type": "provider:goafrica"
    }
  ]
}
GET/v1/providers/{provider_id}match:read

Statut du provider — taille de l'index, dernière synchronisation

Réponse
{
  "provider_id": "goafrica",
  "name": "GoAfrica Online",
  "index_count": 1247,
  "last_sync_at": "2026-06-17T10:30:00Z",
  "created_at": "2026-06-01T08:00:00Z"
}

Événements webhook

ÉvénementDescription
candidate.createdNouveau candidat à indexer — champ candidate requis
candidate.updatedCandidat modifié — upsert par external_id
candidate.deletedCandidat supprimé — champ external_id requis