{"openapi":"3.1.0","info":{"title":"DataForB2B API","description":"Search API for Companies and People","version":"1.0.0"},"paths":{"/":{"get":{"summary":"Root","description":"Health check","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","description":"Health check détaillé","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/stats":{"get":{"summary":"Get Stats","description":"Retourne les statistiques globales (source: Elasticsearch — PG ne porte\nplus les colonnes hiring/funding/pays depuis la migration).","operationId":"get_stats_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsResponse"}}}}}}},"/search/people":{"post":{"tags":["search"],"summary":"Search People Endpoint","description":"Recherche avancée de profils avec système de filtres conditionnels\n\n**Authentification requise:** Header `api_key: <your_api_key>`\n\n**Tarification:** 1 crédit par profil retourné (basic info LinkedIn)\n\nFormat similaire aux concurrents avec opérateurs de comparaison.\n\n**Exemple de requête:**\n```json\n{\n  \"filters\": {\n    \"op\": \"and\",\n    \"conditions\": [\n      {\"column\": \"company_headcount\", \"type\": \">=\", \"value\": 50},\n      {\"column\": \"linkedin_followers\", \"type\": \">=\", \"value\": 1000},\n      {\"column\": \"is_open_to_work\", \"type\": \"=\", \"value\": true},\n      {\"column\": \"current_company\", \"type\": \"like\", \"value\": \"Google\"}\n    ]\n  },\n  \"offset\": 0,\n  \"count\": 100,\n  \"order_by\": \"linkedin_followers\",\n  \"order_direction\": \"desc\"\n}\n```\n\n**Opérateurs supportés:**\n- `=`, `!=` : Égalité/Inégalité\n- `>`, `>=`, `<`, `<=` : Comparaison numérique\n- `in`, `not_in` : Dans/Pas dans une liste\n- `like`, `not_like` : Recherche textuelle (case-insensitive)\n- `is_null`, `is_not_null` : Null/Non-null\n- `between` : Entre deux valeurs (nécessite value et value2)\n\n**Colonnes disponibles:**\n\n**Basic:** first_name, last_name, full_name, headline, country, city, region, profile_language\n\n**Professional:** current_company, current_title, seniority_level, job_function, years_in_position, years_at_company\n\n**Company:** company_hq_country, company_hq_city, company_headcount, company_headcount_range, company_type, company_industry\n\n**Experience:** total_experience_years, companies_count, avg_tenure_months\n\n**Education:** highest_degree, top_school, certification_count\n\n**Influence:** linkedin_followers, linkedin_connections, follower_growth_30d, follower_growth_90d, is_creator, is_influencer\n\n**Signals:** recently_changed_job, days_in_current_job, is_open_to_work\n\n**Contact:** has_email, has_phone, email_verified\n\n**Tarification:** 0.25 crédit par profil retourné (données de la base)","operationId":"search_people_endpoint_search_people_post","parameters":[{"name":"X-Debug-SQL","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Debug-Sql"}},{"name":"X-Debug-Verify","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Debug-Verify"}},{"name":"x-internal-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Secret"}},{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvancedPeopleSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search People Endpoint Search People Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/companies":{"post":{"tags":["search"],"summary":"Search Companies Endpoint","description":"Recherche avancée d'entreprises avec système de filtres conditionnels.\n\n**Authentification requise:** Header `api_key: <your_api_key>`\n\nFormat identique au people search avec opérateurs de comparaison.\n\n**Exemple de requête:**\n```json\n{\n  \"filters\": {\n    \"op\": \"and\",\n    \"conditions\": [\n      {\"column\": \"country_iso_code\", \"type\": \"=\", \"value\": \"FR\"},\n      {\"column\": \"employee_count\", \"type\": \">=\", \"value\": 50},\n      {\"column\": \"is_actively_hiring\", \"type\": \"=\", \"value\": true},\n      {\"column\": \"category\", \"type\": \"like\", \"value\": \"SaaS\"}\n    ]\n  },\n  \"offset\": 0,\n  \"count\": 25,\n  \"order_by\": \"follower_count\",\n  \"order_direction\": \"desc\",\n  \"verify_live\": false\n}\n```\n\n**Colonnes directes (companies_v2):**\n- name, tagline, description, domain\n- country_iso_code, city, region\n- industry, employee_count, founded_year\n- company_type, follower_count\n- page_verified, is_actively_hiring\n- employee_growth_percent, funding_stage\n\n**Colonnes lookup (tables jointes):**\n- category (via company_categories)\n- investor (via company_investors)\n- office_country, office_city (via company_locations)\n- total_funding_usd, total_funding_rounds (via company_funding)\n- employee_growth_1m/6m/12m (via company_growth_stats)\n- job_title (via company_job_postings)\n\n**Tarification:** 0.25 credit par company retournee (donnees de la base)","operationId":"search_companies_endpoint_search_companies_post","parameters":[{"name":"X-Debug-SQL","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Debug-Sql"}},{"name":"x-internal-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Internal-Secret"}},{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvancedCompanySearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/posts":{"post":{"tags":["search"],"summary":"Search Posts Endpoint","description":"Search LinkedIn posts with advanced filters\n\n**Authentification requise:** Header `api_key: <your_api_key>`\n\n**Tarification:** 1 credit per 10 posts returned\n\nSearch for LinkedIn posts using various filters like author company,\nindustry, job title, content type, date, mentions, etc.\n\n**Available filters:**\n\n| Filter | Description | Example |\n|--------|-------------|---------|\n| `keyword` | Search in post content | \"AI startup\" |\n| `author_company` | Author's company name | \"Google\" |\n| `author_industry` | Author's industry | \"Technology\" |\n| `author_job_title` | Author's job title | \"CEO\" |\n| `content_type` | Post type | ARTICLE, VIDEO, PHOTO, DOCUMENT |\n| `date_posted` | Time filter | past_24h, past_week, past_month |\n| `from_member` | Author's member URN | \"ACoAABxxxxxx\" |\n| `from_organization` | Company ID (numeric) | \"1234567\" |\n| `mentions_member` | Mentioned member URN | \"ACoAABxxxxxx\" |\n| `mentions_organization` | Mentioned org ID | \"1234567\" |\n| `posted_by` | Relationship filter | first, following, first,following |\n| `sort_by` | Sort order | date_posted (default), relevance |\n\n**Example request:**\n```json\n{\n    \"keyword\": \"AI\",\n    \"author_company\": \"Google\",\n    \"content_type\": \"ARTICLE\",\n    \"date_posted\": \"past_week\",\n    \"sort_by\": \"date_posted\",\n    \"count\": 20\n}\n```\n\n**Example response:**\n```json\n{\n    \"total\": 150,\n    \"offset\": 0,\n    \"count\": 20,\n    \"has_next\": true,\n    \"credits_used\": 2,\n    \"results\": [\n        {\n            \"urn\": \"urn:li:share:xxx\",\n            \"url\": \"https://linkedin.com/feed/update/...\",\n            \"content\": \"Post content here...\",\n            \"likes\": 150,\n            \"comments\": 25,\n            \"shares\": 10,\n            \"posted_date\": \"2024-01-15\",\n            \"posted_days_ago\": 3,\n            \"author\": {\n                \"name\": \"John Doe\",\n                \"headline\": \"CEO at Google\",\n                \"profile_url\": \"https://linkedin.com/in/johndoe\",\n                \"profile_picture\": \"https://...\"\n            },\n            \"images\": []\n        }\n    ]\n}\n```","operationId":"search_posts_endpoint_search_posts_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPostsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPostsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/lookalike":{"post":{"tags":["search"],"summary":"Lookalike Search Endpoint","description":"Find similar profiles using vector embedding similarity (pgvector).\n\n**Authentication required:** Header `api_key: <your_api_key>`\n\n**Pricing:** 0.25 credit per profile returned (DB data)\n\nThis endpoint uses OpenAI embeddings + pgvector cosine similarity to find\nprofiles that are semantically similar to a given LinkedIn profile.\n\n**How it works:**\n1. Takes a LinkedIn profile URL, public_id, or member_identity\n2. If the profile has no embedding yet: scrapes it live, generates embedding, stores it\n3. Queries pgvector for the most similar profiles by cosine distance\n4. Returns profiles ranked by similarity score (1.0 = identical, 0.0 = unrelated)\n\n**Use cases:**\n- `sales`: Find similar prospects (matches on title, industry, company size, skills)\n- `recruiter`: Find similar candidates (matches on skills, education, experience)\n\n**Example request:**\n```json\n{\n    \"profile\": \"https://www.linkedin.com/in/johndoe\",\n    \"use_case\": \"sales\",\n    \"country\": \"US\",\n    \"count\": 25,\n    \"offset\": 0\n}\n```\n\n**Example response:**\n```json\n{\n    \"lookalike_profile\": \"https://www.linkedin.com/in/john-doe\",\n    \"total\": 847,\n    \"offset\": 0,\n    \"count\": 25,\n    \"has_next_page\": true,\n    \"credits_used\": 6.25,\n    \"method\": \"vector\",\n    \"results\": [\n        {\n            \"similarity_score\": 0.8234,\n            \"member_identity\": \"ACoAABxxxxxx\",\n            \"headline\": \"Sales Director at BigCo\",\n            ...\n        }\n    ]\n}\n```","operationId":"lookalike_search_endpoint_search_lookalike_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookalikeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookalikeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/llm":{"post":{"tags":["search"],"summary":"Llm Search","description":"Recherche en langage naturel via LLM\n\n**Authentification requise:** Header `api_key: <your_api_key>`\n\n**Tarification:** 1 crédit par profil retourné (basic info LinkedIn)\n\nCette endpoint permet de rechercher des profils ou des entreprises\nen utilisant une requête en langage naturel.\n\n**Exemples de requêtes:**\n- \"développeurs Python à Paris\"\n- \"data scientists qui ont travaillé chez Google\"\n- \"CTO de startups en France\"\n- \"personnes open to work avec plus de 5000 followers\"\n- \"ingénieurs sortis de Polytechnique\"\n\n**Paramètres:**\n- **query**: La requête en langage naturel (obligatoire)\n- **category**: \"people\" ou \"company\" (optionnel, auto-détecté si absent)\n- **output_fields**: Liste des champs à retourner (optionnel)\n- **show_private_fields**: Afficher les champs privés (photo, dates, statuts)\n- **page**: Numéro de page (défaut: 1)\n- **page_size**: Résultats par page (défaut: 25, max: 100)","operationId":"llm_search_search_llm_post","parameters":[{"name":"X-Debug-SQL","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Debug-Sql"}},{"name":"X-Debug-Verify","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Debug-Verify"}},{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/llm/v2":{"post":{"tags":["search"],"summary":"Llm Search V2","description":"Recherche en langage naturel v2 — filtres durs minimaux + ranking sémantique\n\n**Authentification requise:** Header `api_key: <your_api_key>`\n\n**Tarification:** identique à `/search/people` (tarif DB par profil)\n\nContrairement à `/search/llm` (v1), le LLM n'extrait ici que les contraintes DURES\n(géographie, années d'expérience explicites, taille d'entreprise explicite, secteur\nexplicitement nommé, employeur nommé). Tout le reste (rôle, séniorité, skills, domaine,\nproduit) est géré par le ranking sémantique sur la requête telle quelle : le jeu de\nrésultats est large, ordonné par pertinence, chaque profil portant `relevance_score` (0-1).\nAucun filtre n'est relâché ni ajouté côté serveur.\n\n**Paramètres:**\n- **query**: la requête en langage naturel (obligatoire)\n- **category**: \"people\" (v2) — \"company\" est délégué au comportement v1\n- **prioritize**: null (défaut) = ordre de pertinence pur ; \"personal_email\"/\"work_email\"/\"phone\" = contact-d'abord\n- **max_per_company**: diversité, au plus N profils du même employeur en tête (désactivé par défaut, passer une valeur pour l'activer)\n- **page / page_size / count, show_private_fields**: comme la v1\n\nLa réponse a le même format que la v1 ; `query_interpretation` expose en plus\n`rank_query` et `extraction` (ce que le LLM a extrait).","operationId":"llm_search_v2_search_llm_v2_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMSearchV2Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/llm/filters":{"post":{"tags":["search"],"summary":"Llm Filters","description":"Génère des filtres à partir d'une requête en langage naturel (sans exécuter la recherche)\n\n**Authentification requise:** Header `api_key: <your_api_key>`\n\n**Tarification:** 1 crédit par appel\n\nCet endpoint utilise un LLM pour convertir une requête en langage naturel en filtres\nstructurés au format FilterGroup, sans exécuter la recherche SQL. Utile pour:\n- Prévisualiser les filtres avant d'exécuter une recherche\n- Intégrer la génération de filtres dans un workflow personnalisé\n- Utiliser les filtres générés avec les endpoints `/search/people` ou `/search/companies`\n\n---\n\n**Paramètres:**\n\n| Champ | Type | Requis | Description |\n|-------|------|--------|-------------|\n| `query` | string | Oui | Requête en langage naturel (min 3 caractères) |\n| `category` | string | Oui | `\"people\"` ou `\"company\"` |\n| `with_total` | bool | Non | Si `true`, renvoie `total_results` (count des matches, plafonné à 10000) |\n| `previous_query` | string | Non | Requête de l'appel précédent (frappe incrémentale) |\n| `previous_filters` | object | Non | `simple_filters` renvoyé à l'appel précédent (frappe incrémentale) |\n\n---\n\n**Exemples de requêtes:**\n\n*People:*\n- `\"développeurs Python à Paris\"`\n- `\"data scientists qui ont travaillé chez Google\"`\n- `\"CTO de startups avec plus de 5000 followers\"`\n- `\"ingénieurs sortis de Polytechnique\"`\n\n*Companies:*\n- `\"startups SaaS en France avec plus de 50 employés\"`\n- `\"entreprises tech à Paris qui recrutent\"`\n- `\"scale-ups B2B avec levée de fonds série A\"`\n\n---\n\n**Réponse:**\n\n| Champ | Type | Description |\n|-------|------|-------------|\n| `category` | string | Catégorie normalisée: `\"people\"` ou `\"companies\"` |\n| `filters` | object | Filtres au format FilterGroup (utilisable directement avec `/search/people` ou `/search/companies`) |\n| `requested_count` | int ou null | Nombre de résultats demandés si détecté dans la requête (ex: \"50 développeurs\" → 50) |\n| `simple_filters` | object ou null | Filtres simples détectés — à renvoyer en `previous_filters` au prochain appel |\n| `total_results` | int ou null | Nombre de matches (si `with_total=true`), plafonné à 10000 |\n| `total_results_is_capped` | bool ou null | `true` si le count a atteint le plafond de 10000 |\n| `cached` | bool | `true` si les filtres viennent du cache (aucun appel LLM) |\n\n---\n\n**Format des filtres (FilterGroup):**\n\n```json\n{\n  \"op\": \"and\",\n  \"conditions\": [\n    {\n      \"op\": \"or\",\n      \"conditions\": [\n        {\"column\": \"current_title\", \"type\": \"like\", \"value\": \"Developer\"},\n        {\"column\": \"current_title\", \"type\": \"like\", \"value\": \"Engineer\"}\n      ]\n    },\n    {\n      \"op\": \"or\",\n      \"conditions\": [\n        {\"column\": \"profile_location\", \"type\": \"like\", \"value\": \"Paris\"}\n      ]\n    }\n  ]\n}\n```\n\nLes filtres peuvent ensuite être passés au body de `/search/people` ou `/search/companies`.","operationId":"llm_filters_search_llm_filters_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMFiltersRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMFiltersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/count":{"post":{"tags":["search"],"summary":"Search Count","description":"Compte le nombre de matches d'un FilterGroup sans exécuter la recherche.\n\n**Authentification requise:** Header `api_key: <your_api_key>`\n\n**Tarification:** Gratuit (0 crédit) — destiné à un compteur de résultats live.\n\nLe count est plafonné à 10000 (`total_results_is_capped=true` au-delà).","operationId":"search_count_search_count_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchCountRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchCountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/reasoning":{"post":{"tags":["search"],"summary":"Reasoning Search","description":"Agentic reasoning search over people.\n\n**Authentication:** header `api_key: <your_api_key>`\n\n**How it works:** a Claude agent reasons about the query, asks clarifying\nquestions when needed, probes the database in real time (free counts), then\nruns the best final search. Multi-turn via `session_id`.\n\n**Flow:**\n1. First call: send `query`. Response is either `needs_input` (answer the\n   questions) or `complete` (final results).\n2. If `needs_input`: send back `session_id` + `answers` ({question_id: answer}).\n\n**Pricing:** a flat agent fee (2 credits) per completed search, plus the final\nsearch billed like `/search/people` (per-result, DB rate).\nClarification turns (`needs_input`) are free.","operationId":"reasoning_search_search_reasoning_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReasoningSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReasoningSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/reasoning/stream":{"post":{"tags":["search"],"summary":"Reasoning Search Stream","description":"Streaming variant of /search/reasoning (Server-Sent Events).\n\nEmits the agent's reasoning steps live, then a terminal event:\n  event: step      → {type: \"thought\"|\"action\"|\"observation\", ...}\n  event: questions → {session_id, reasoning, questions}\n  event: result    → {session_id, reasoning, applied_filters, total, count, results, ...}\n  event: error     → {message}\n  event: done      → {}","operationId":"reasoning_search_stream_search_reasoning_stream_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReasoningSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search/jobs":{"post":{"tags":["jobs"],"summary":"Search Jobs Endpoint","description":"Search job postings across platforms.\n\n**Authentication:** header `api_key: <your_api_key>`\n\n**Pricing:** 1 unit of `basic_info` credits per 10 job postings returned.\n\n**Platforms:** `linkedin`, `indeed`.\n\n**Available filters:**\n\n| Filter | Description | Example |\n|--------|-------------|---------|\n| `keyword` | Job title / skill / company | \"software engineer\" |\n| `location` | Location | \"Paris, France\" |\n| `country` | Country for Indeed (ignored by LinkedIn) | usa, france, uk, germany |\n| `distance` | Radius in miles | 25 |\n| `job_type` | Employment type | fulltime, parttime, contract, internship |\n| `work_type` | Work arrangement | onsite, remote, hybrid |\n| `experience_level` | Seniority (LinkedIn only) | entry_level, mid_senior, director |\n| `date_posted` | Freshness | past_24h, past_week, past_month |\n| `company_ids` | LinkedIn company IDs (LinkedIn only) | \"1441,1035\" |\n| `fetch_description` | Include full JD per job (LinkedIn: slower) | true |\n\nNotes: LinkedIn uses `location` (guest API); Indeed uses `country` (+ `location`).\nIndeed returns the description inline (no extra latency); LinkedIn fetches it\nper-job when `fetch_description=true` (slower). On Indeed, `date_posted` filters\nby date-on-Indeed and cannot be combined with `job_type`/`work_type`.\n\n**Example request:**\n```json\n{\n    \"platform\": \"linkedin\",\n    \"keyword\": \"backend engineer\",\n    \"location\": \"Paris, France\",\n    \"job_type\": \"fulltime\",\n    \"date_posted\": \"past_week\",\n    \"count\": 25\n}\n```","operationId":"search_jobs_endpoint_search_jobs_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchJobsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchJobsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profiles/batch":{"post":{"tags":["profiles"],"summary":"Get Profiles Batch","description":"Fetch full profile cards from the database by profile IDs.\n\n**Use case:** After getting profile IDs from /search/people, use this endpoint\nto fetch the complete profile data stored in the database.\n\n**Request:**\n- `profile_ids`: List of encoded profile IDs (e.g., \"prof_PW5tI98B...\") to fetch (max 1000)\n- `show_private_fields`: Show private fields (flags, badges, etc.) - default false\n\n**Response:**\n- `count`: Number of profiles returned\n- `profiles`: List of full profile objects with all related data (jobs, education, skills, etc.)","operationId":"get_profiles_batch_profiles_batch_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/companies/batch":{"post":{"tags":["companies"],"summary":"Get Companies Batch","description":"Fetch full company data from the database by company IDs.\n\n**Use case:** After getting company IDs from /search/companies, use this endpoint\nto fetch the complete company data stored in the database.\n\n**Request:**\n- `company_ids`: List of encoded company IDs (e.g., \"org_xxx\") to fetch (max 1000)\n\n**Response:**\n- `count`: Number of companies returned\n- `companies`: List of full company objects with all related data (locations, funding, etc.)","operationId":"get_companies_batch_companies_batch_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompaniesBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/fields":{"get":{"tags":["enrichment"],"summary":"List Enrichment Fields","description":"List available enrichment fields\n\nReturns the list of all fields that can be enriched,\nwith their description and data source.","operationId":"list_enrichment_fields_enrich_fields_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EnrichmentFieldInfo"},"type":"array","title":"Response List Enrichment Fields Enrich Fields Get"}}}}}}},"/enrich/reverse-email":{"post":{"tags":["enrichment"],"summary":"Reverse Email Endpoint","description":"Resolve a professional email address into its LinkedIn profile.\n\nFlow:\n1. The email domain is resolved to exactly one company (same domain\n   matching as `/companies` search — no re-index needed for www./path\n   variants).\n2. If the local-part cleanly splits into two name tokens\n   (`firstname.lastname` or `lastname.firstname`) and exactly one person\n   at that company matches either order, the match is deterministic - no\n   model involved.\n3. Otherwise (single token, initials, ambiguous split) a small candidate\n   pool is pulled by first name and a lightweight LLM confirms which\n   candidate the email belongs to, or that none of them do.\n\nReturns the same profile shape as `/enrich/profile`. 404 if no company or\nno confirmed profile match could be found.","operationId":"reverse_email_endpoint_enrich_reverse_email_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEmailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/profile/v1":{"post":{"tags":["enrichment"],"summary":"Enrich Profile V1 Endpoint","description":"Profile enrichment endpoint — V1.\n\nNow backed by the DECO engine (Voyager REST FullProfileWithEntities — clip-safe,\nall company data inline). Same response format as before and as `/enrich/profile`,\nso existing v1 integrations keep working unchanged — no version bump needed. The\ntoken-clipping GraphQL engine is NO LONGER used by this endpoint.\n\nEnriches a LinkedIn profile with the requested data types.\nAll enrichment types are optional - at least one must be requested.\n\n**Supported profile_identifier formats:**\n- Full URL: `https://www.linkedin.com/in/john-doe-123456/`\n- Short URL: `linkedin.com/in/john-doe`\n- Public ID only: `john-doe`\n- Member identity: `ACoAABxxxxxx`\n- URN: `urn:li:fsd_profile:ACoAABxxxxxx`\n- Encoded profile ID: `prof_PVXj1LZJg54zXKcnKNBusu8LgvJX5SYm5QYj`\n\n**Available enrichments:**\n- **enrich_profile**: Full profile details (same format as /search/people response)\n- **enrich_work_email**: Professional/work email address\n- **enrich_personal_email**: Personal email address\n- **enrich_phone**: Phone number\n\n**Example request:**\n```json\n{\n    \"profile_identifier\": \"prof_PVXj1LZJg54zXKcnKNBusu8LgvJX5SYm5QYj\",\n    \"enrich_profile\": true,\n    \"enrich_work_email\": true\n}\n```\n\n**Example response:**\n```json\n{\n    \"profile\": {\n        \"id\": \"prof_xxxxx\",\n        \"first_name\": \"John\",\n        \"last_name\": \"Doe\",\n        \"headline\": \"Software Engineer\",\n        ...\n    },\n    \"work_email\": \"john.doe@company.com\"\n}\n```","operationId":"enrich_profile_v1_endpoint_enrich_profile_v1_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/profile/bulk/v1":{"post":{"tags":["enrichment"],"summary":"Bulk Enrich Profile V1 Endpoint","description":"Bulk profile enrichment endpoint — V1.\n\nNow backed by the DECO engine (clip-safe), same response format as before — no\nversion bump needed for existing integrations. The token-clipping GraphQL engine\nis NO LONGER used.\n\nEnriches up to 100 LinkedIn profiles in a single request. Profiles are\nprocessed concurrently (bounded parallelism), which is dramatically faster\nthan calling /enrich/profile sequentially for each profile.\n\n**Supported profile_identifier formats** (per item): same as /enrich/profile\n(full URL, short URL, public ID, member identity, URN, encoded `prof_` ID).\n\n**Example request:**\n```json\n{\n    \"profile_identifiers\": [\"john-doe\", \"jane-smith\", \"prof_xxxxx\"],\n    \"enrich_work_email\": true,\n    \"enrich_personal_email\": true\n}\n```\n\n**Response:** `results` is a list aligned with the input order. Each item\nhas the same shape as a single /enrich/profile response, plus\n`profile_identifier`. Failed profiles carry an `error` field.\n\n**Credits:** debited only for successful enrichments, same per-field cost\nas /enrich/profile.","operationId":"bulk_enrich_profile_v1_endpoint_enrich_profile_bulk_v1_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkEnrichRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/profile/v2":{"post":{"tags":["enrichment"],"summary":"Enrich Profile V2 Endpoint","description":"Profile enrichment endpoint — V2 (SDUI engine).\n\nDrop-in replacement for `/enrich/profile`: same request/response contract and\nsame supported identifier formats. The only difference is that the full\nprofile is scraped via the LinkedIn iOS/SDUI endpoints rather than the\nVoyager GraphQL query, which clips (bans) li_at tokens far less aggressively.\n\nwork_email / personal_email / phone / github use the exact same services as\nv1. Returns full-parity data (experience, education, skills, certifications,\nlanguages, projects, organizations, honors, patents, publications, courses,\nvolunteer).","operationId":"enrich_profile_v2_endpoint_enrich_profile_v2_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/profile":{"post":{"tags":["enrichment"],"summary":"Enrich Profile V2 Endpoint","description":"Profile enrichment endpoint — V2 (SDUI engine).\n\nDrop-in replacement for `/enrich/profile`: same request/response contract and\nsame supported identifier formats. The only difference is that the full\nprofile is scraped via the LinkedIn iOS/SDUI endpoints rather than the\nVoyager GraphQL query, which clips (bans) li_at tokens far less aggressively.\n\nwork_email / personal_email / phone / github use the exact same services as\nv1. Returns full-parity data (experience, education, skills, certifications,\nlanguages, projects, organizations, honors, patents, publications, courses,\nvolunteer).","operationId":"enrich_profile_v2_endpoint_enrich_profile_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/profile/bulk/v2":{"post":{"tags":["enrichment"],"summary":"Bulk Enrich Profile V2 Endpoint","description":"Bulk profile enrichment endpoint — V2 (SDUI engine).\n\nSame contract as `/enrich/profile/bulk`, but profiles are scraped via the\nLinkedIn iOS/SDUI endpoints (lower token-clip risk at scale). Up to 100\nprofiles, processed with bounded concurrency.","operationId":"bulk_enrich_profile_v2_endpoint_enrich_profile_bulk_v2_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkEnrichRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/profile/bulk":{"post":{"tags":["enrichment"],"summary":"Bulk Enrich Profile V2 Endpoint","description":"Bulk profile enrichment endpoint — V2 (SDUI engine).\n\nSame contract as `/enrich/profile/bulk`, but profiles are scraped via the\nLinkedIn iOS/SDUI endpoints (lower token-clip risk at scale). Up to 100\nprofiles, processed with bounded concurrency.","operationId":"bulk_enrich_profile_v2_endpoint_enrich_profile_bulk_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkEnrichRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/company":{"post":{"tags":["enrichment"],"summary":"Enrich Company Endpoint","description":"Company enrichment endpoint\n\nEnriches a LinkedIn company with full profile data.\n\n**Supported company_identifier formats:**\n- Universal name (slug): `google`, `microsoft`, `apple`\n- Full URL: `https://www.linkedin.com/company/google/`\n- Short URL: `linkedin.com/company/google`\n- Encoded company ID: `org_0lox54iG5IEZSb71mZWLR8z9CVPs8v1Lj8oQ` (as returned by search and typeahead)\n\n**Example request:**\n```json\n{\n    \"company_identifier\": \"google\"\n}\n```\n\n**Example response:**\n```json\n{\n    \"company\": {\n        \"id\": \"org_xxxxx\",\n        \"name\": \"Google\",\n        \"tagline\": \"...\",\n        \"description\": \"...\",\n        \"industry\": \"...\",\n        ...\n    }\n}\n```","operationId":"enrich_company_endpoint_enrich_company_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyEnrichRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyEnrichResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/comments":{"post":{"tags":["enrichment"],"summary":"Extract Comments Endpoint","description":"Extract comments made by a LinkedIn profile\n\nExtracts the comments a user has made on LinkedIn posts.\n\n**Supported profile_identifier formats:**\n- Full URL: `https://www.linkedin.com/in/john-doe-123456/`\n- Short URL: `linkedin.com/in/john-doe`\n- Public ID only: `john-doe`\n- Member identity: `ACoAABxxxxxx`\n- Encoded profile ID: `prof_PVXj1LZJg54zXKcnKNBusu8LgvJX5SYm5QYj`\n\n**Pagination:**\n- `offset`: Number of comments to skip (default: 0)\n- `count`: Number of comments to return (default: 10, max: 100)\n\n**Example request:**\n```json\n{\n    \"profile_identifier\": \"john-doe\",\n    \"offset\": 0,\n    \"count\": 20\n}\n```\n\n**Example response:**\n```json\n{\n    \"total\": 20,\n    \"offset\": 0,\n    \"count\": 20,\n    \"has_next_page\": true,\n    \"credits_used\": 1,\n    \"results\": [\n        {\n            \"comment_id\": \"urn:li:comment:(activity:7xxx,xxx)\",\n            \"comment_content\": \"Great post! Thanks for sharing.\",\n            \"comment_time\": \"2d\",\n            \"comment_time_days\": 2,\n            \"commenter\": {\n                \"name\": \"John Doe\",\n                \"profile_url\": \"https://linkedin.com/in/john-doe\",\n                \"headline\": \"Software Engineer\"\n            },\n            \"post\": {\n                \"url\": \"https://linkedin.com/feed/update/urn:li:activity:xxx\",\n                \"content\": \"Original post content...\",\n                \"author\": {\n                    \"name\": \"Jane Smith\"\n                }\n            }\n        }\n    ],\n    \"profile_id\": \"prof_PVXj1LZJg54zXKcnKNBusu8LgvJX5SYm5QYj\"\n}\n```\n\n**Credits:** 1 credit per 10 comments (or fraction thereof)","operationId":"extract_comments_endpoint_enrich_comments_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractCommentsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractCommentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/posts":{"post":{"tags":["enrichment"],"summary":"Extract Posts Endpoint","description":"Extract posts made by a LinkedIn profile\n\nExtracts posts published by a LinkedIn user.\n\n**Supported profile_identifier formats:**\n- Full URL: `https://www.linkedin.com/in/john-doe-123456/`\n- Short URL: `linkedin.com/in/john-doe`\n- Public ID only: `john-doe`\n- Member identity: `ACoAABxxxxxx`\n- Encoded profile ID: `prof_PVXj1LZJg54zXKcnKNBusu8LgvJX5SYm5QYj`\n\n**Pagination:**\n- `offset`: Number of posts to skip (default: 0)\n- `count`: Number of posts to return (default: 10, max: 100)\n\n**Filtering:**\n- `sort_by`: DATE_POSTED or RELEVANCE\n- `post_type`: ARTICLE, VIDEO, PHOTO, DOCUMENT or null for all\n- `keyword`: Keyword filter for post content\n\n**Credits:** 1 credit per 10 posts (or fraction thereof)","operationId":"extract_posts_endpoint_enrich_posts_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractPostsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractPostsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/post/reactions":{"post":{"tags":["enrichment"],"summary":"Extract Post Reactions Endpoint","description":"Extract reactions on a social media post.\n\nThe platform is inferred from `post_url`. LinkedIn is supported today;\nother platforms (Twitter, Instagram, …) can be added without changing\nthe endpoint contract.\n\n**Supported post_url formats:**\n- `https://www.linkedin.com/feed/update/urn:li:activity:1234567890/`\n- `https://www.linkedin.com/posts/john-doe_some-slug-activity-1234567890-Abcd/`\n- `urn:li:activity:1234567890`\n- `urn:li:ugcPost:1234567890`\n- `urn:li:share:1234567890`\n- `urn:li:groupPost:7235:1234567890`\n\n**Pagination:**\n- `offset`: number of reactions to skip (default 0)\n- `count`: number of reactions to return (default 10, max 100; batched 50/call internally)\n\n**Credits:** 1 credit per 10 reactions (or fraction thereof)","operationId":"extract_post_reactions_endpoint_enrich_post_reactions_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractPostReactionsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractPostReactionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/post/comments":{"post":{"tags":["enrichment"],"summary":"Extract Post Comments Endpoint","description":"Extract comments on a social media post.\n\nThe platform is inferred from `post_url`. LinkedIn is supported today;\nother platforms (Twitter, Instagram, …) can be added without changing\nthe endpoint contract.\n\n**Supported post_url formats:**\n- `https://www.linkedin.com/feed/update/urn:li:activity:1234567890/`\n- `https://www.linkedin.com/posts/john-doe_some-slug-activity-1234567890-Abcd/`\n- `urn:li:activity:1234567890`\n- `urn:li:ugcPost:1234567890`\n- `urn:li:share:1234567890`\n- `urn:li:groupPost:7235:1234567890`\n\nNon-activity post types are normalised to `urn:li:activity:{id}` before querying\nLinkedIn's `/feed/comments` REST endpoint (which only accepts activity URNs).\n\n**Pagination:**\n- `offset`: number of comments to skip (default 0)\n- `count`: number of comments to return (default 10, max 100; batched 50/call internally)\n\n**Credits:** 1 credit per 10 comments (or fraction thereof)","operationId":"extract_post_comments_endpoint_enrich_post_comments_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractPostCommentsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractPostCommentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/enrich/verify-email":{"post":{"tags":["enrichment"],"summary":"Verify Email Endpoint","description":"Vérifie la délivrabilité d'une adresse email.\n\n**Authentification requise:** Header `api_key: <your_api_key>`\n\nMême pipeline de vérification que l'enrichissement du work email — existence\nréelle de la mailbox (Microsoft 365 / Google Workspace), puis SMTP, puis\nBounceBan pour les domaines catch-all — mais avec l'email fourni en entrée\nau lieu d'être déduit d'un profil LinkedIn.\n\n**Statuts:**\n- `deliverable` : mailbox confirmée joignable\n- `undeliverable` : mailbox inexistante / rejetée\n- `risky` : domaine catch-all/accept-all non confirmable\n- `unknown` : impossible de trancher\n- `invalid` : syntaxe invalide\n\n**Tarification:** 1 crédit par vérification concluante\n(`deliverable`/`undeliverable`/`risky`). `invalid` et `unknown` sont gratuits.","operationId":"verify_email_endpoint_enrich_verify_email_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEmailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/account":{"get":{"tags":["account"],"summary":"Get Account","description":"Vérifie la validité de l'API key et retourne le nombre de crédits\n\n**Authentification requise:** Header `api_key: <your_api_key>`\n\n**Réponse:**\n- **valid**: `true` si l'API key est valide\n- **credits**: Nombre de crédits disponibles","operationId":"get_account_account_get","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/account/logs":{"get":{"tags":["account"],"summary":"Get Account Logs","description":"Historique de consommation de crédits du client\n\n**Authentification requise:** Header `api_key: <your_api_key>`\n\n**Réponse:**\n- **total_credits**: Crédits consommés sur la période\n- **by_endpoint**: Répartition par endpoint (nombre de débits + crédits)\n- **logs**: Entrées individuelles, les plus récentes d'abord (paginées via limit/offset)","operationId":"get_account_logs_account_logs_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"Time period in days (max 90)","default":30,"title":"Days"},"description":"Time period in days (max 90)"},{"name":"endpoint","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by endpoint, e.g. /search/people","title":"Endpoint"},"description":"Filter by endpoint, e.g. /search/people"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Number of log entries to return","default":100,"title":"Limit"},"description":"Number of log entries to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountLogsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/typeahead":{"get":{"tags":["typeahead"],"summary":"Typeahead","description":"Unified autocomplete for search filters.\n\nPass `type=<category>` to select what to search. Each returned result is\nbilled at 0.01 credit (i.e. 0.1 credit per 10 results); empty result sets\nare free.","operationId":"typeahead_typeahead_get","parameters":[{"name":"type","in":"query","required":true,"schema":{"$ref":"#/components/schemas/TypeaheadType","description":"Typeahead category"},"description":"Typeahead category"},{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":100,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Max results (1-20)","default":20,"title":"Limit"},"description":"Max results (1-20)"},{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TypeaheadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/signals":{"get":{"tags":["signals"],"summary":"Get Signals","description":"The catalog of signals you can monitor.","operationId":"get_signals_signals_get","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SignalCatalogEntry"},"title":"Response Get Signals Signals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/monitors":{"post":{"tags":["signals"],"summary":"Post Monitor","description":"Create a monitor: subscribe to a signal, optionally watching one or more values.","operationId":"post_monitor_monitors_post","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["signals"],"summary":"Get Monitors","description":"List my monitors.","operationId":"get_monitors_monitors_get","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MonitorResponse"},"title":"Response Get Monitors Monitors Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/monitors/{monitor_id}":{"delete":{"tags":["signals"],"summary":"Delete Monitor Route","description":"Delete a monitor.","operationId":"delete_monitor_route_monitors__monitor_id__delete","parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/monitors/{monitor_id}/targets":{"post":{"tags":["signals"],"summary":"Add Monitor Targets","description":"Add values to watch on an existing monitor (e.g. more profiles to a job_change monitor).","operationId":"add_monitor_targets_monitors__monitor_id__targets_post","parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TargetsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["signals"],"summary":"Remove Monitor Targets","description":"Remove targets from a monitor.","operationId":"remove_monitor_targets_monitors__monitor_id__targets_delete","parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TargetsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/monitors/{monitor_id}/events":{"get":{"tags":["signals"],"summary":"Get Monitor Events","description":"Events delivered to a monitor.","operationId":"get_monitor_events_monitors__monitor_id__events_get","parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MonitorEventResponse"},"title":"Response Get Monitor Events Monitors  Monitor Id  Events Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/exports/latest":{"get":{"tags":["exports"],"summary":"Latest Export","description":"Most recent completed daily export, with a fresh 2-day download link.","operationId":"latest_export_exports_latest_get","parameters":[{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/exports/{export_date}":{"get":{"tags":["exports"],"summary":"Export By Date","description":"Daily export for a specific date (YYYY-MM-DD).","operationId":"export_by_date_exports__export_date__get","parameters":[{"name":"export_date","in":"path","required":true,"schema":{"type":"string","title":"Export Date"}},{"name":"api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AccountLogsResponse":{"properties":{"period_days":{"type":"integer","title":"Period Days"},"total_requests":{"type":"integer","title":"Total Requests"},"total_credits":{"type":"number","title":"Total Credits"},"by_endpoint":{"items":{"$ref":"#/components/schemas/EndpointUsage"},"type":"array","title":"By Endpoint"},"by_member":{"items":{"$ref":"#/components/schemas/MemberUsage"},"type":"array","title":"By Member","default":[]},"offset":{"type":"integer","title":"Offset"},"count":{"type":"integer","title":"Count"},"logs":{"items":{"$ref":"#/components/schemas/UsageLogEntry"},"type":"array","title":"Logs"}},"type":"object","required":["period_days","total_requests","total_credits","by_endpoint","offset","count","logs"],"title":"AccountLogsResponse"},"AccountResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"credits":{"type":"number","title":"Credits"}},"type":"object","required":["valid","credits"],"title":"AccountResponse"},"AdvancedCompanySearchRequest":{"properties":{"filters":{"anyOf":[{"$ref":"#/components/schemas/FilterGroup"},{"type":"null"}],"description":"Groupe de filtres avec opérateur AND/OR"},"lookalike_company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lookalike Company","description":"LinkedIn company URL or universal_name to find similar companies. Mutually exclusive with filters."},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Offset pour la pagination","default":0},"count":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Count","description":"Nombre de résultats (max 1000)","default":25},"order_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order By","description":"Colonne de tri (follower_count, employee_count, founded_year, etc.)"},"order_direction":{"type":"string","title":"Order Direction","description":"Direction du tri (asc/desc)","default":"asc"},"verify_live":{"type":"boolean","title":"Verify Live","description":"Verify that live data still matches filter conditions","default":false},"fallback_db":{"type":"boolean","title":"Fallback Db","description":"Fallback to DB data if live enrichment fails. Set to False to return error instead of stale data.","default":true},"exclude_billing_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10000},{"type":"null"}],"title":"Exclude Billing Ids","description":"Internal (backend_app only, requires x-internal-secret): result ids already billed in a previous page of the same search, not billed again."}},"type":"object","title":"AdvancedCompanySearchRequest","description":"Requête de recherche avancée pour les companies.\nUtilise le même format FilterGroup que people search."},"AdvancedPeopleSearchRequest":{"properties":{"filters":{"anyOf":[{"$ref":"#/components/schemas/FilterGroup"},{"type":"null"}],"description":"Filter conditions"},"lookalike_profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lookalike Profile","description":"LinkedIn profile identifier (URL, public_id, or member_identity) to find similar people. Mutually exclusive with filters."},"lookalike_use_case":{"type":"string","enum":["sales","recruiter"],"title":"Lookalike Use Case","description":"Lookalike use case: 'sales' to find similar prospects (title, industry, company size) or 'recruiter' to find similar candidates (school, skills, field of study)","default":"sales"},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Number of results to skip","default":0},"count":{"type":"integer","maximum":5000.0,"minimum":1.0,"title":"Count","description":"Number of results to return","default":25},"exclude_billing_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10000},{"type":"null"}],"title":"Exclude Billing Ids","description":"Internal (backend_app only, requires x-internal-secret): result ids already billed in a previous page of the same search, not billed again."},"order_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order By","description":"Column to sort by (e.g., follower_count)"},"order_direction":{"type":"string","enum":["asc","desc"],"title":"Order Direction","description":"Sort direction","default":"asc"},"rank_query":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Rank Query","description":"Free text describing the ideal profile (a sentence or a whole job description). Filters still define the result set; matches are returned by relevance to this text and each result carries relevance_score (0-1). Ranks on role, domain and vocabulary, in any language. Structural constraints (seniority, years of experience, employment type, exclusions) are not ranked: express them as filters. Takes precedence over order_by. Pure relevance order by default; set prioritize to put profiles holding a contact type first (each group stays in relevance order)."},"prioritize":{"anyOf":[{"type":"string","enum":["personal_email","work_email","phone"]},{"type":"null"}],"title":"Prioritize","description":"Optional sort: profiles with this contact data come first in results (no filtering, just ordering). Default null = no contact-first ordering."},"max_per_company":{"anyOf":[{"type":"integer","maximum":25.0,"minimum":1.0},{"type":"null"}],"title":"Max Per Company","description":"Diversity cap, only applied with rank_query: at most N profiles of the same current employer in the relevance-ranked head; the overflow is moved after it (nothing is filtered out, total is unchanged). Prevents one large company whose name matches the query from filling the first pages. Null (default) disables."},"reveal_personal_email":{"type":"boolean","title":"Reveal Personal Email","description":"When true, include the actual personal_emails array on each result. Use during pagination to expose contact data once you've narrowed the page.","default":false},"verify_live":{"type":"boolean","title":"Verify Live","description":"Verify that live data still matches filter conditions (excludes outdated profiles)","default":false},"show_private_fields":{"type":"boolean","title":"Show Private Fields","description":"Show private fields (flags, badges, publications, projects, courses, patents, honors, volunteer, media)","default":false},"exclude_no_picture":{"type":"boolean","title":"Exclude No Picture","description":"Exclude profiles without a profile picture (filters out fake/incomplete profiles)","default":true},"fallback_db":{"type":"boolean","title":"Fallback Db","description":"Fallback to DB data if live enrichment fails. Set to False to return error instead of stale data.","default":true}},"type":"object","title":"AdvancedPeopleSearchRequest","description":"Advanced people search request - returns only profile_urns\n\nExample:\n{\n    \"filters\": {\n        \"op\": \"and\",\n        \"conditions\": [\n            {\"column\": \"current_title\", \"type\": \"like\", \"value\": \"Engineer\"},\n            {\"column\": \"follower_count\", \"type\": \">=\", \"value\": 1000}\n        ]\n    },\n    \"offset\": 0,\n    \"count\": 100,\n    \"order_by\": \"follower_count\",\n    \"order_direction\": \"desc\"\n}"},"BulkEnrichRequest":{"properties":{"profile_identifiers":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Profile Identifiers","description":"List of LinkedIn profile identifiers (1-100). Each supports: https://linkedin.com/in/john-doe, john-doe, ACoAABxxxxxx, prof_xxx"},"enrich_profile":{"type":"boolean","title":"Enrich Profile","description":"Enrich full profile details (same format as search/people response)","default":false},"enrich_work_email":{"type":"boolean","title":"Enrich Work Email","description":"Enrich professional/work email address","default":false},"enrich_personal_email":{"type":"boolean","title":"Enrich Personal Email","description":"Enrich personal email address","default":false},"enrich_phone":{"type":"boolean","title":"Enrich Phone","description":"Enrich phone number","default":false},"enrich_github":{"type":"boolean","title":"Enrich Github","description":"Find GitHub profile URL via Google search","default":false}},"type":"object","required":["profile_identifiers"],"title":"BulkEnrichRequest","description":"Bulk enrichment request - enriches up to 100 profiles concurrently.\nAt least one enrich_* field must be True."},"CommenterInfo":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"profile_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Url"},"profile_picture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Picture"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"headline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headline"}},"type":"object","title":"CommenterInfo","description":"Info about the commenter (the profile being scraped)"},"CompaniesBatchRequest":{"properties":{"company_ids":{"items":{"type":"string"},"type":"array","maxItems":1000,"title":"Company Ids","description":"List of encoded company IDs (e.g., 'org_xxx') to fetch"}},"type":"object","required":["company_ids"],"title":"CompaniesBatchRequest","description":"Request schema for batch company fetch"},"CompanyEnrichRequest":{"properties":{"company_identifier":{"type":"string","title":"Company Identifier","description":"LinkedIn company identifier: universal_name (slug), URL, or encoded ID (org_xxx)"}},"type":"object","required":["company_identifier"],"title":"CompanyEnrichRequest","description":"Company enrichment request"},"CompanyEnrichResponse":{"properties":{"company":{"additionalProperties":true,"type":"object","title":"Company","description":"Full company data (same format as search/companies response)"},"credits_used":{"type":"number","title":"Credits Used","description":"Credits charged for this request","default":0}},"type":"object","required":["company"],"title":"CompanyEnrichResponse","description":"Company enrichment response with full company data"},"CompanySearchResponse":{"properties":{"total":{"type":"integer","title":"Total","description":"Total number of matching companies (estimate)"},"offset":{"type":"integer","title":"Offset","description":"Current offset","default":0},"count":{"type":"integer","title":"Count","description":"Number of results returned"},"has_next_page":{"type":"boolean","title":"Has Next Page","description":"Whether there are more results available"},"credits_used":{"type":"number","title":"Credits Used","description":"Credits used for this search","default":0},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results","description":"Company results"},"_debug":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Debug"}},"type":"object","required":["total","count","has_next_page","results"],"title":"CompanySearchResponse","description":"Réponse de recherche companies"},"EndpointUsage":{"properties":{"endpoint":{"type":"string","title":"Endpoint"},"requests":{"type":"integer","title":"Requests"},"credits":{"type":"number","title":"Credits"}},"type":"object","required":["endpoint","requests","credits"],"title":"EndpointUsage"},"EnrichRequest":{"properties":{"profile_identifier":{"type":"string","title":"Profile Identifier","description":"LinkedIn profile identifier(s). Single or comma-separated for batch. Supports: https://linkedin.com/in/john-doe, john-doe, ACoAABxxxxxx, prof_xxx Batch example: 'prof_xxx1,prof_xxx2,prof_xxx3'"},"enrich_profile":{"type":"boolean","title":"Enrich Profile","description":"Enrich full profile details (same format as search/people response)","default":false},"enrich_work_email":{"type":"boolean","title":"Enrich Work Email","description":"Enrich professional/work email address","default":false},"enrich_personal_email":{"type":"boolean","title":"Enrich Personal Email","description":"Enrich personal email address","default":false},"enrich_phone":{"type":"boolean","title":"Enrich Phone","description":"Enrich phone number","default":false},"enrich_github":{"type":"boolean","title":"Enrich Github","description":"Find GitHub profile URL via Google search","default":false}},"type":"object","required":["profile_identifier"],"title":"EnrichRequest","description":"Unified enrichment request - all fields optional except profile_identifier.\nAt least one enrich_* field must be True.\nSupports batch enrichment with comma-separated identifiers."},"EnrichResponse":{"properties":{"profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Profile","description":"Full profile data (single request)"},"work_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Email","description":"Professional/work email address (single request)"},"personal_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Personal Email","description":"Personal email address (single request)"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"Phone number (single request)"},"git_profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Git Profile","description":"GitHub profile data (username, bio, repos, followers, pinned_repos, etc.)"},"results":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Results","description":"Batch results (only present for batch requests)"},"credits_used":{"type":"number","title":"Credits Used","description":"Credits charged for this request","default":0}},"type":"object","title":"EnrichResponse","description":"Unified enrichment response - only includes requested fields.\nFor batch requests, returns a list of results."},"EnrichmentFieldInfo":{"properties":{"field":{"type":"string","title":"Field"},"description":{"type":"string","title":"Description"},"source":{"type":"string","title":"Source"}},"type":"object","required":["field","description","source"],"title":"EnrichmentFieldInfo","description":"Information sur un champ enrichissable"},"ExtractCommentsRequest":{"properties":{"profile_identifier":{"type":"string","title":"Profile Identifier","description":"LinkedIn profile identifier. Supports: https://linkedin.com/in/john-doe, john-doe, ACoAABxxxxxx, prof_xxx"},"count":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Count","description":"Number of comments to return (max 1000, auto-paginates internally)","default":10},"pagination_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pagination Token","description":"Pagination token from previous response to get next page"}},"type":"object","required":["profile_identifier"],"title":"ExtractCommentsRequest","description":"Request for extracting profile comments"},"ExtractCommentsResponse":{"properties":{"total":{"type":"integer","title":"Total","description":"Total number of comments returned","default":0},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there are more comments to fetch","default":false},"next_pagination_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Pagination Token","description":"Token to fetch next page (null if no more results)"},"credits_used":{"type":"number","title":"Credits Used","description":"Credits used for this request","default":0},"commenter":{"anyOf":[{"$ref":"#/components/schemas/CommenterInfo"},{"type":"null"}],"description":"Info about the profile whose comments are being extracted"},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results","description":"List of extracted comments"}},"type":"object","title":"ExtractCommentsResponse","description":"Response containing extracted profile comments"},"ExtractPostCommentsRequest":{"properties":{"post_url":{"type":"string","title":"Post Url","description":"LinkedIn post URL or URN. Accepted: https://www.linkedin.com/feed/update/urn:li:activity:{id}/, https://www.linkedin.com/posts/{slug}-activity-{id}-{xxx}/, urn:li:activity:{id}, urn:li:ugcPost:{id}, urn:li:share:{id}, urn:li:groupPost:{group}:{id}"},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Number of comments to skip (for pagination)","default":0},"count":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Count","description":"Number of comments to return (max 100, auto-batches in chunks of 50)","default":10}},"type":"object","required":["post_url"],"title":"ExtractPostCommentsRequest","description":"Request for extracting comments on a LinkedIn post."},"ExtractPostCommentsResponse":{"properties":{"platform":{"type":"string","title":"Platform","description":"Source platform","default":"linkedin"},"post_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Id","description":"Canonical platform-specific id of the post these comments belong to"},"offset":{"type":"integer","title":"Offset","description":"Offset used for this request","default":0},"count":{"type":"integer","title":"Count","description":"Number of comments returned","default":0},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total comments available on the post"},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there are more comments to fetch","default":false},"credits_used":{"type":"number","title":"Credits Used","description":"Credits used for this request","default":0},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results","description":"List of comments"}},"type":"object","title":"ExtractPostCommentsResponse","description":"Response containing comments on a post."},"ExtractPostReactionsRequest":{"properties":{"post_url":{"type":"string","title":"Post Url","description":"LinkedIn post URL or URN. Accepted: https://www.linkedin.com/feed/update/urn:li:activity:{id}/, https://www.linkedin.com/posts/{slug}-activity-{id}-{xxx}/, urn:li:activity:{id}, urn:li:ugcPost:{id}, urn:li:share:{id}, urn:li:groupPost:{group}:{id}"},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Number of reactions to skip (for pagination)","default":0},"count":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Count","description":"Number of reactions to return (max 100, auto-batches in chunks of 50)","default":10}},"type":"object","required":["post_url"],"title":"ExtractPostReactionsRequest","description":"Request for extracting reactions on a LinkedIn post."},"ExtractPostReactionsResponse":{"properties":{"platform":{"type":"string","title":"Platform","description":"Source platform","default":"linkedin"},"post_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Id","description":"Canonical platform-specific id of the post these reactions belong to"},"offset":{"type":"integer","title":"Offset","description":"Offset used for this request","default":0},"count":{"type":"integer","title":"Count","description":"Number of reactions returned","default":0},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total reactions available on the post"},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there are more reactions to fetch","default":false},"credits_used":{"type":"number","title":"Credits Used","description":"Credits used for this request","default":0},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results","description":"List of reactions"}},"type":"object","title":"ExtractPostReactionsResponse","description":"Response containing reactions on a post."},"ExtractPostsRequest":{"properties":{"profile_identifier":{"type":"string","title":"Profile Identifier","description":"LinkedIn profile identifier. Supports: https://linkedin.com/in/john-doe, john-doe, ACoAABxxxxxx, prof_xxx"},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Number of posts to skip (for pagination)","default":0},"count":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Count","description":"Number of posts to return (max 500 per request)","default":10},"sort_by":{"type":"string","title":"Sort By","description":"Sort order: date_posted or relevance","default":"date_posted"},"post_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Type","description":"Filter by type: ARTICLE, VIDEO, PHOTO, DOCUMENT or null for all"},"keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyword","description":"Keyword filter for post content"}},"type":"object","required":["profile_identifier"],"title":"ExtractPostsRequest","description":"Request for extracting profile posts"},"ExtractPostsResponse":{"properties":{"offset":{"type":"integer","title":"Offset","description":"Offset used for this request","default":0},"count":{"type":"integer","title":"Count","description":"Count requested","default":0},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there are more posts to fetch","default":false},"credits_used":{"type":"number","title":"Credits Used","description":"Credits used for this request","default":0},"author":{"anyOf":[{"$ref":"#/components/schemas/PostAuthorInfo"},{"type":"null"}],"description":"Info about the profile whose posts are being extracted"},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results","description":"List of extracted posts"}},"type":"object","title":"ExtractPostsResponse","description":"Response containing extracted profile posts"},"FilterCondition":{"properties":{"column":{"type":"string","title":"Column","description":"Column name to filter on"},"type":{"type":"string","enum":["=","!=",">",">=","<","<=","in","not_in","like","not_like","is_null","is_not_null","between","regex"],"title":"Type"},"value":{"anyOf":[{},{"type":"null"}],"title":"Value","description":"Filter value"},"value2":{"anyOf":[{},{"type":"null"}],"title":"Value2","description":"Second value for 'between' operator"}},"type":"object","required":["column","type"],"title":"FilterCondition","description":"Single filter condition\n\nOperators:\n- \"=\", \"!=\" : Equality\n- \">\", \">=\", \"<\", \"<=\" : Numeric comparison\n- \"in\", \"not_in\" : List membership\n- \"like\", \"not_like\" : Text search (case-insensitive)\n- \"is_null\", \"is_not_null\" : Null checks\n- \"between\" : Range (requires value and value2)"},"FilterGroup":{"properties":{"op":{"type":"string","enum":["and","or"],"title":"Op","description":"Logical operator","default":"and"},"conditions":{"items":{"anyOf":[{"$ref":"#/components/schemas/FilterCondition"},{"$ref":"#/components/schemas/FilterGroup"}]},"type":"array","title":"Conditions"}},"type":"object","title":"FilterGroup","description":"Group of filters with AND/OR logic\nCan contain FilterCondition or nested FilterGroup"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JobResult":{"properties":{"job_id":{"type":"string","title":"Job Id","description":"Platform job id"},"platform":{"type":"string","title":"Platform","description":"Source platform (linkedin, indeed)"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"job_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Url"},"employment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Employment Type"},"seniority_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seniority Level"},"job_function":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Function"},"is_remote":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Remote"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"company_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Url"},"company_logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Logo Url"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"salary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary"},"date_posted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Posted"},"posted_days_ago":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Posted Days Ago"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"additionalProperties":true,"type":"object","required":["job_id","platform"],"title":"JobResult","description":"Single job posting (normalized across platforms)."},"LLMFiltersRequest":{"properties":{"query":{"type":"string","minLength":3,"title":"Query","description":"Requête en langage naturel"},"category":{"type":"string","title":"Category","description":"Catégorie de recherche: 'people' ou 'company'"},"lookalike_use_case":{"type":"string","enum":["sales","recruiter"],"title":"Lookalike Use Case","description":"Lookalike use case (only used when query contains a LinkedIn profile URL): 'sales' to find similar prospects or 'recruiter' to find similar candidates","default":"sales"},"with_total":{"type":"boolean","title":"With Total","description":"Si true, exécute un count Elasticsearch et renvoie 'total_results' (nombre de matches, plafonné à 10000)","default":false},"verify":{"type":"boolean","title":"Verify","description":"Si true (défaut), vérifie les filtres générés contre l'index et tente une réparation ciblée quand ils renvoient trop peu de résultats. Désactivé automatiquement pendant la frappe incrémentale.","default":true},"previous_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous Query","description":"Requête de l'appel précédent (frappe incrémentale). À fournir avec 'previous_filters'."},"previous_filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Previous Filters","description":"Champ 'simple_filters' renvoyé à l'appel précédent. Permet au LLM d'affiner au lieu de tout recalculer."}},"type":"object","required":["query","category"],"title":"LLMFiltersRequest","description":"Requête pour générer des filtres via LLM sans exécuter la recherche"},"LLMFiltersResponse":{"properties":{"category":{"type":"string","title":"Category","description":"Catégorie détectée/utilisée: 'people' ou 'companies'"},"filters":{"additionalProperties":true,"type":"object","title":"Filters","description":"Filtres au format FilterGroup avancé"},"requested_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Requested Count","description":"Nombre de résultats demandés dans la requête (si détecté)"},"simple_filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Simple Filters","description":"Filtres simples détectés — à renvoyer en 'previous_filters' à l'appel suivant pour la frappe incrémentale"},"total_results":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Results","description":"Nombre de matches (rempli uniquement si with_total=true). Plafonné à 10000."},"total_results_is_capped":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Total Results Is Capped","description":"True si total_results a atteint le plafond de 10000 (afficher '10000+')"},"cached":{"type":"boolean","title":"Cached","description":"True si les filtres proviennent du cache (aucun appel LLM effectué)","default":false}},"type":"object","required":["category","filters"],"title":"LLMFiltersResponse","description":"Réponse contenant les filtres générés par le LLM"},"LLMSearchRequest":{"properties":{"query":{"type":"string","minLength":3,"title":"Query","description":"Requête en langage naturel"},"category":{"type":"string","title":"Category","description":"Catégorie de recherche: 'people' ou 'company'"},"lookalike_use_case":{"type":"string","enum":["sales","recruiter"],"title":"Lookalike Use Case","description":"Lookalike use case (only used when query contains a LinkedIn profile URL): 'sales' to find similar prospects or 'recruiter' to find similar candidates","default":"sales"},"output_fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Fields","description":"Champs à retourner dans les résultats. Si non fourni, champs par défaut."},"show_private_fields":{"type":"boolean","title":"Show Private Fields","description":"Si True, affiche les champs privés (photo, dates, is_open_to_work, is_hiring, etc.)","default":false},"page":{"type":"integer","minimum":1.0,"title":"Page","description":"Numéro de page","default":1},"page_size":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Page Size","description":"Nombre de résultats par page","default":25},"count":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Count","description":"Alias for page_size (takes priority if both provided)"},"order_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order By","description":"Colonne de tri (ex: follower_count, first_name, last_name)"},"order_direction":{"type":"string","enum":["asc","desc"],"title":"Order Direction","description":"Direction du tri","default":"asc"}},"type":"object","required":["query","category"],"title":"LLMSearchRequest","description":"Requête de recherche en langage naturel"},"LLMSearchResponse":{"properties":{"query_interpretation":{"additionalProperties":true,"type":"object","title":"Query Interpretation","description":"Interprétation de la requête par le LLM"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"has_next_page":{"type":"boolean","title":"Has Next Page"},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results"},"_debug":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Debug"}},"type":"object","required":["query_interpretation","total","page","page_size","has_next_page","results"],"title":"LLMSearchResponse","description":"Réponse de recherche LLM"},"LLMSearchV2Request":{"properties":{"query":{"type":"string","minLength":3,"title":"Query","description":"Requête en langage naturel"},"category":{"type":"string","title":"Category","description":"Catégorie de recherche: 'people' (v2) ou 'company' (délégué au comportement v1)","default":"people"},"lookalike_use_case":{"type":"string","enum":["sales","recruiter"],"title":"Lookalike Use Case","description":"Lookalike use case (utilisé seulement quand la query contient une URL LinkedIn, délégué au comportement v1)","default":"sales"},"show_private_fields":{"type":"boolean","title":"Show Private Fields","description":"Si True, affiche les champs privés (photo, dates, is_open_to_work, is_hiring, etc.)","default":false},"page":{"type":"integer","minimum":1.0,"title":"Page","description":"Numéro de page","default":1},"page_size":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Page Size","description":"Nombre de résultats par page","default":25},"count":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Count","description":"Alias for page_size (takes priority if both provided)"},"prioritize":{"anyOf":[{"type":"string","enum":["personal_email","work_email","phone"]},{"type":"null"}],"title":"Prioritize","description":"Tri contact-d'abord: les profils ayant ce type de contact passent devant, chaque groupe restant trié par pertinence. Défaut null = ordre de pertinence pur."},"max_per_company":{"anyOf":[{"type":"integer","maximum":25.0,"minimum":1.0},{"type":"null"}],"title":"Max Per Company","description":"Diversité: au plus N profils d'un même employeur dans la tête des résultats (le surplus est repoussé plus loin, rien n'est filtré, l'ordre par pertinence n'est plus strict au-delà). Désactivé par défaut (null) — préserve le tri par relevance_score ; passer une valeur pour l'activer."}},"type":"object","required":["query"],"title":"LLMSearchV2Request","description":"Requête de recherche en langage naturel v2 (filtres durs minimaux + ranking sémantique)."},"LookalikeRequest":{"properties":{"profile":{"anyOf":[{"type":"string","minLength":3},{"type":"null"}],"title":"Profile","description":"LinkedIn profile URL, public_id, or member_identity"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company","description":"LinkedIn company URL or universal_name to find similar companies"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"ISO country code to filter results (e.g. 'US', 'FR')"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location","description":"Location text filter (city, region, etc.) - matches on profile location or job location (e.g. 'Paris', 'San Francisco Bay Area')"},"count":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Count","description":"Number of results to return","default":25},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Pagination offset","default":0}},"type":"object","title":"LookalikeRequest","description":"Request for vector-based lookalike search"},"LookalikeResponse":{"properties":{"lookalike_profile":{"type":"string","title":"Lookalike Profile","description":"LinkedIn URL of the profile used as lookalike source"},"total":{"type":"integer","title":"Total"},"offset":{"type":"integer","title":"Offset"},"count":{"type":"integer","title":"Count"},"has_next_page":{"type":"boolean","title":"Has Next Page"},"credits_used":{"type":"number","title":"Credits Used"},"method":{"type":"string","title":"Method","description":"Search method used: 'vector' or 'llm_fallback'","default":"vector"},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results"}},"type":"object","required":["lookalike_profile","total","offset","count","has_next_page","credits_used","results"],"title":"LookalikeResponse","description":"Response for vector-based lookalike search"},"MemberUsage":{"properties":{"member":{"type":"string","title":"Member"},"requests":{"type":"integer","title":"Requests"},"credits":{"type":"number","title":"Credits"}},"type":"object","required":["member","requests","credits"],"title":"MemberUsage"},"MonitorCreate":{"properties":{"signal":{"type":"string","title":"Signal"},"watch":{"anyOf":[{},{"type":"null"}],"title":"Watch"},"url":{"type":"string","title":"Url"},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters"},"target":{"anyOf":[{"$ref":"#/components/schemas/TargetSpec"},{"type":"null"}]},"targets":{"anyOf":[{"items":{"$ref":"#/components/schemas/TargetSpec"},"type":"array"},{"type":"null"}],"title":"Targets"}},"type":"object","required":["signal","url"],"title":"MonitorCreate"},"MonitorEventResponse":{"properties":{"id":{"type":"integer","title":"Id"},"signal":{"type":"string","title":"Signal"},"event_type":{"type":"string","title":"Event Type"},"target":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Target"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","signal","event_type","created_at"],"title":"MonitorEventResponse"},"MonitorResponse":{"properties":{"id":{"type":"integer","title":"Id"},"signal":{"type":"string","title":"Signal"},"watch":{"items":{"type":"string"},"type":"array","title":"Watch","default":[]},"url":{"type":"string","title":"Url"},"active":{"type":"boolean","title":"Active"},"created_at":{"type":"string","title":"Created At"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters"}},"type":"object","required":["id","signal","url","active","created_at"],"title":"MonitorResponse"},"PostAuthorInfo":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"profile_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Url"},"profile_picture":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Picture"},"headline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headline"}},"type":"object","title":"PostAuthorInfo","description":"Info about the post author"},"ProfilesBatchRequest":{"properties":{"profile_ids":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Profile Ids","description":"List of encoded profile IDs (e.g., 'prof_PW5tI98B...')"},"show_private_fields":{"type":"boolean","title":"Show Private Fields","description":"Show private fields (flags, badges, publications, etc.)","default":false}},"type":"object","required":["profile_ids"],"title":"ProfilesBatchRequest","description":"Request to fetch full profiles by encoded IDs"},"ReasoningQuestion":{"properties":{"id":{"type":"string","title":"Id"},"text":{"type":"string","title":"Text"},"suggestions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Suggestions"}},"type":"object","required":["id","text"],"title":"ReasoningQuestion","description":"Question de clarification posée par l'agent."},"ReasoningSearchRequest":{"properties":{"query":{"anyOf":[{"type":"string","maxLength":3000},{"type":"null"}],"title":"Query","description":"Requête en langage naturel (max 3000 caractères). Obligatoire au 1er tour (session_id absent)."},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"Identifiant de session renvoyé par un tour 'needs_input'. À fournir avec 'answers'."},"answers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Answers","description":"Réponses aux questions du tour précédent, au format {question_id: réponse}."},"category":{"type":"string","enum":["people","companies"],"title":"Category","description":"Cible de recherche: 'people' ou 'companies'.","default":"people"},"max_results":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Max Results","description":"Nombre de résultats de la recherche finale.","default":25}},"type":"object","title":"ReasoningSearchRequest","description":"Requête de recherche par raisonnement (agent multi-tour)."},"ReasoningSearchResponse":{"properties":{"status":{"type":"string","enum":["needs_input","complete"],"title":"Status","description":"'needs_input' = répondre aux questions ; 'complete' = résultats finaux."},"session_id":{"type":"string","title":"Session Id","description":"À renvoyer pour poursuivre la conversation."},"reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning","description":"Résumé du raisonnement / de ce qui a été recherché."},"questions":{"anyOf":[{"items":{"$ref":"#/components/schemas/ReasoningQuestion"},"type":"array"},{"type":"null"}],"title":"Questions","description":"Questions à poser à l'utilisateur."},"applied_filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Applied Filters","description":"FilterGroup final construit par l'agent et exécuté."},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count"},"has_next_page":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Next Page"},"credits_used":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Credits Used"},"results":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Results"}},"type":"object","required":["status","session_id"],"title":"ReasoningSearchResponse","description":"Réponse du reasoning search : clarification en attente OU résultats finaux."},"ReverseEmailRequest":{"properties":{"email":{"type":"string","title":"Email","description":"Professional email address, e.g. jane.doe@acme.com"}},"type":"object","required":["email"],"title":"ReverseEmailRequest","description":"Resolve a professional email address into the matching LinkedIn profile."},"ReverseEmailResponse":{"properties":{"profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Profile","description":"Matched LinkedIn profile (same format as /enrich/profile)"},"match_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Method","description":"'deterministic' (name pattern + exact company match) or 'llm_validated'"},"credits_used":{"type":"number","title":"Credits Used","description":"Credits charged for this request","default":0}},"type":"object","title":"ReverseEmailResponse","description":"Same profile shape as /enrich/profile. `match_method` tells you whether the\nmatch was deterministic (name pattern + a single exact company match on the\ndomain - no model involved) or confirmed by a small LLM because the email's\nlocal-part didn't cleanly split into firstname/lastname."},"SearchCountRequest":{"properties":{"category":{"type":"string","title":"Category","description":"Catégorie: 'people' ou 'company'"},"filters":{"additionalProperties":true,"type":"object","title":"Filters","description":"Filtres au format FilterGroup avancé"}},"type":"object","required":["category","filters"],"title":"SearchCountRequest","description":"Requête pour compter les matches d'un FilterGroup sans exécuter la recherche"},"SearchCountResponse":{"properties":{"total_results":{"type":"integer","title":"Total Results","description":"Nombre de matches (plafonné à 10000)"},"total_results_is_capped":{"type":"boolean","title":"Total Results Is Capped","description":"True si le count a atteint le plafond de 10000"}},"type":"object","required":["total_results","total_results_is_capped"],"title":"SearchCountResponse","description":"Nombre de matches pour un FilterGroup"},"SearchJobsRequest":{"properties":{"platform":{"type":"string","title":"Platform","description":"Job platform to search: 'linkedin' or 'indeed'.","default":"linkedin"},"keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyword","description":"Search keyword (job title, skill, company, ...)"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location","description":"Location, e.g. \"Paris, France\" or \"United States\""},"country":{"type":"string","title":"Country","description":"Country for Indeed (e.g. usa, france, uk, germany). Ignored by LinkedIn (uses location).","default":"usa"},"distance":{"anyOf":[{"type":"integer","maximum":200.0,"minimum":0.0},{"type":"null"}],"title":"Distance","description":"Search radius in miles around the location"},"job_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Type","description":"Employment type: fulltime, parttime, contract, temporary, internship"},"work_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Type","description":"Work arrangement: onsite, remote, hybrid"},"experience_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Experience Level","description":"Seniority (LinkedIn only): internship, entry_level, associate, mid_senior, director, executive"},"date_posted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Posted","description":"Freshness: past_24h, past_week, past_month"},"company_ids":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Ids","description":"Comma-separated company ids to restrict the search (LinkedIn only). Accepts encoded org ids (org_xxx, as returned by /typeahead?type=company and /search/companies) and/or raw numeric LinkedIn ids."},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"Company name to restrict the search. LinkedIn: resolved to the matching company (most-followed) — a strict employer filter. Indeed: used as the search keyword (approximate). Ignored if company_ids is provided."},"fetch_description":{"type":"boolean","title":"Fetch Description","description":"Include the full job description on each result (LinkedIn: slower, O(n) extra requests; Indeed: inline, no extra cost)","default":false},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Number of results to skip (pagination)","default":0},"count":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Count","description":"Number of job postings to return (max 100 per request)","default":25}},"type":"object","title":"SearchJobsRequest","description":"Request for searching job postings across platforms.\n\nExample:\n{\n    \"platform\": \"linkedin\",\n    \"keyword\": \"backend engineer\",\n    \"location\": \"Paris, France\",\n    \"job_type\": \"fulltime\",\n    \"date_posted\": \"past_week\",\n    \"count\": 25\n}"},"SearchJobsResponse":{"properties":{"total":{"type":"integer","title":"Total","description":"Number of job postings found so far (lower bound when has_next is true)","default":0},"offset":{"type":"integer","title":"Offset","description":"Current offset","default":0},"count":{"type":"integer","title":"Count","description":"Number of results returned","default":0},"has_next":{"type":"boolean","title":"Has Next","description":"Whether more results are available","default":false},"credits_used":{"type":"number","title":"Credits Used","description":"Credits used for this search","default":0},"results":{"items":{"$ref":"#/components/schemas/JobResult"},"type":"array","title":"Results","description":"Job posting results"}},"type":"object","title":"SearchJobsResponse","description":"Response for job search (same envelope as /search/posts)."},"SearchPostsRequest":{"properties":{"platform":{"type":"string","title":"Platform","description":"Platform to search: linkedin, twitter, or reddit.","default":"linkedin"},"keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyword","description":"Search keyword in post content"},"match":{"type":"string","title":"Match","description":"Keyword matching: 'strict' (default) keeps only posts whose text actually contains the searched terms; 'loose' returns the platform's raw results.","default":"strict"},"post_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Url","description":"Target a single post by URL (LinkedIn/Twitter/Reddit) instead of a keyword search. Use with `include` to get its engagers."},"include":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Include","description":"Attach engagers to each returned post: any of ['reactions', 'comments']. Each engager is a lead. (Reddit exposes comments only — no upvoters.)"},"engagement_count":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Engagement Count","description":"Max engagers per type, per post, when `include` is set (1-1000).","default":25},"subreddit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subreddit","description":"Reddit only: restrict the search to one subreddit (e.g. 'SaaS')."},"author_company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Company","description":"Filter by author's company name"},"author_industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Industry","description":"Filter by author's industry"},"author_job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Job Title","description":"Filter by author's job title"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type","description":"Filter by content type: ARTICLE, VIDEO, PHOTO, DOCUMENT"},"date_posted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Posted","description":"Filter by date: past_24h, past_week, past_month"},"from_member":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Member","description":"Filter by member URN (profile entity URN, e.g., ACoAABxxxxxx)"},"from_organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Organization","description":"Filter by organization/company ID (numeric)"},"mentions_member":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mentions Member","description":"Filter by mentioned member URN"},"mentions_organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mentions Organization","description":"Filter by mentioned organization ID"},"posted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posted By","description":"Filter by relationship: first, following, first,following"},"sort_by":{"type":"string","title":"Sort By","description":"Sort order: date_posted or relevance","default":"date_posted"},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Starting position for pagination","default":0},"count":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Count","description":"Number of posts to return (max 100 per request)","default":10},"force_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Force Token","description":"Force a specific token for testing (internal use only)"}},"type":"object","title":"SearchPostsRequest","description":"Request for searching posts across platforms (LinkedIn, Twitter/X, Reddit)."},"SearchPostsResponse":{"properties":{"total":{"type":"integer","title":"Total","description":"Total number of posts matching the search","default":0},"offset":{"type":"integer","title":"Offset","description":"Offset used for this request","default":0},"count":{"type":"integer","title":"Count","description":"Number of posts returned","default":0},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there are more posts to fetch","default":false},"credits_used":{"type":"number","title":"Credits Used","description":"Credits used for this request","default":0},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results","description":"List of posts"}},"type":"object","title":"SearchPostsResponse","description":"Response containing searched posts"},"SignalCatalogEntry":{"properties":{"signal":{"type":"string","title":"Signal"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description"},"target_types":{"items":{"type":"string"},"type":"array","title":"Target Types"},"target_required":{"type":"boolean","title":"Target Required"},"event_types":{"items":{"type":"string"},"type":"array","title":"Event Types"}},"type":"object","required":["signal","label","description","target_types","target_required","event_types"],"title":"SignalCatalogEntry"},"StatsResponse":{"properties":{"total_companies":{"type":"integer","title":"Total Companies"},"total_profiles":{"type":"integer","title":"Total Profiles"},"hiring_companies":{"type":"integer","title":"Hiring Companies"},"funded_companies":{"type":"integer","title":"Funded Companies"},"unique_industries":{"type":"integer","title":"Unique Industries"},"unique_countries":{"type":"integer","title":"Unique Countries"}},"type":"object","required":["total_companies","total_profiles","hiring_companies","funded_companies","unique_industries","unique_countries"],"title":"StatsResponse","description":"Statistiques globales"},"TargetSpec":{"properties":{"type":{"type":"string","title":"Type"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"}},"type":"object","required":["type"],"title":"TargetSpec"},"TargetsRequest":{"properties":{"watch":{"anyOf":[{},{"type":"null"}],"title":"Watch"},"targets":{"anyOf":[{"items":{"$ref":"#/components/schemas/TargetSpec"},"type":"array"},{"type":"null"}],"title":"Targets"},"values":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Values"}},"type":"object","title":"TargetsRequest"},"TypeaheadResponse":{"properties":{"type":{"$ref":"#/components/schemas/TypeaheadType","description":"The type that was queried"},"count":{"type":"integer","title":"Count","description":"Number of results returned"},"credits_used":{"type":"number","title":"Credits Used","description":"Credits debited for this request"},"results":{"items":{"$ref":"#/components/schemas/TypeaheadResult"},"type":"array","title":"Results","description":"Matching values, prefix-matches first then ranked"}},"type":"object","required":["type","count","credits_used","results"],"title":"TypeaheadResponse","description":"Unified typeahead response."},"TypeaheadResult":{"properties":{"value":{"type":"string","title":"Value","description":"The canonical value to use as a filter input"},"popularity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Popularity","description":"Relative popularity bucket: '<1k', '1k-10k', '10k-100k', or '100k+'. Null for type=company."},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Extra fields (e.g., org_id and logo_url for type=company)"}},"type":"object","required":["value"],"title":"TypeaheadResult","description":"Single typeahead match."},"TypeaheadType":{"type":"string","enum":["company","people_industry","company_industry","category","location","city","region","school","title","skill","investor"],"title":"TypeaheadType","description":"Supported typeahead categories."},"UsageLogEntry":{"properties":{"timestamp":{"type":"string","title":"Timestamp"},"endpoint":{"type":"string","title":"Endpoint"},"credits":{"type":"number","title":"Credits"},"member":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member"}},"type":"object","required":["timestamp","endpoint","credits"],"title":"UsageLogEntry"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyEmailRequest":{"properties":{"email":{"type":"string","maxLength":320,"minLength":3,"title":"Email","description":"Email address to verify"}},"type":"object","required":["email"],"title":"VerifyEmailRequest","description":"Request to verify the deliverability of a single email address."},"VerifyEmailResponse":{"properties":{"email":{"type":"string","title":"Email","description":"The email that was verified (normalized, lowercased)"},"status":{"type":"string","title":"Status","description":"Verdict: 'deliverable', 'undeliverable', 'risky' (catch-all/accept-all, unconfirmable), 'unknown' (could not determine), or 'invalid' (bad syntax)"},"is_deliverable":{"type":"boolean","title":"Is Deliverable","description":"True only when the mailbox is confirmed reachable"},"is_catch_all":{"type":"boolean","title":"Is Catch All","description":"Whether the domain accepts all recipients (catch-all)","default":false},"mail_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mail Provider","description":"Detected mail host: 'm365', 'google', or 'other'"},"syntax_valid":{"type":"boolean","title":"Syntax Valid","description":"Whether the address is syntactically valid","default":true},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Machine-readable reason when not deliverable"},"credits_used":{"type":"number","title":"Credits Used","description":"Credits charged for this verification","default":0}},"type":"object","required":["email","status","is_deliverable"],"title":"VerifyEmailResponse","description":"Deliverability verdict for a single email address."}}}}