Developers

Connecteur de données#

Le connecteur de données remplit un site NAMES LEGAL à partir de données qui existent déjà ailleurs, sans code du côté du propriétaire du site. Le propriétaire connecte une source dans sa console (Intégrations → Importer mes données), relie les colonnes aux champs par glisser-déposer, effectue un essai à blanc, puis lance. Les sources peuvent être des fichiers ou une API — la vôtre.

Cette page s'adresse aux développeurs d'applications qui souhaitent devenir une source : ce que NAMES LEGAL attend de votre API, et comment rendre la connexion automatique.

Comment le connecteur lit votre API#

Le propriétaire du site saisit :

  • l'adresse de votre API,
  • un mode d'authentification et son secret,
  • éventuellement, où se trouve la liste dans votre réponse (data.items).

NAMES LEGAL appelle ensuite votre API en HTTPS avec GET, suit la pagination, et transforme chaque objet en une fiche. Les objets imbriqués sont aplatis (author.name), les listes de valeurs simples sont jointes par des virgules.

Authentification#

Mode Ce qui est envoyé
Aucune rien
Clé dans un en-tête <Header-Name>: <key> (par défaut X-API-Key)
Clé dans l'adresse ?<param>=<key> (par défaut api_key)
Jeton Bearer Authorization: Bearer <token>
Nom d'utilisateur et mot de passe Authorization: Basic …

Les secrets sont stockés chiffrés et ne sont plus jamais affichés dans la console. Donnez aux propriétaires de site une clé en lecture seule, limitée au contenu publié : le connecteur ne fait que lire.

Trouver la liste#

Si aucun chemin n'est indiqué, le connecteur prend, dans l'ordre : le tableau items, puis le premier tableau d'objets trouvé dans la réponse. Un tableau JSON nu fonctionne aussi.

Pagination#

N'importe lequel de ces éléments est suivi automatiquement, jusqu'à 200 pages :

  • un en-tête HTTP Link: <…>; rel="next" ;
  • une URL de page suivante dans le corps : next, next_url, next_page_url, links.next, meta.next, pagination.next ;
  • un curseur dans le corps : next_cursor, meta.next_cursor, pagination.next_cursor — renvoyé sous la forme ?cursor=.

Arrêtez en renvoyant une liste vide ou aucun lien suivant.

Limites#

  • 5 000 fiches par jeu de données et par synchronisation.
  • 10 Mo par réponse, 15 secondes par requête.
  • Les adresses doivent être publiques : les adresses de réseau privé et local sont refusées, redirections comprises. Lors d'une redirection vers un autre hôte, votre clé n'est pas transmise.

Le format de flux NAMES LEGAL#

Exposez vos données dans ce format et le propriétaire du site n'a rien à relier : chaque collection devient un jeu de données déjà connecté à la rubrique correspondante du site.

1. Un index#

GET https://app.example.com/api/names-legal/
{
  "names_legal_feed": 1,
  "collections": {
    "team": "https://app.example.com/api/names-legal/team/",
    "services": "https://app.example.com/api/names-legal/programmes/",
    "blog": "https://app.example.com/api/names-legal/news/"
  }
}

Les noms de collections sont les clés de rubrique listées dans la référence des champs ci-dessous (team, services, blog, events, faq, jobs…). Les URL peuvent être relatives à l'index.

2. Une liste par collection#

{
  "items": [
    {
      "id": "T-104",
      "first_name": "Awa",
      "last_name": "Diop",
      "position": "Mathematics teacher",
      "short_bio": "Twelve years of teaching.",
      "profile_image": "https://app.example.com/media/staff/104.jpg",
      "email": "a.diop@example.com"
    }
  ],
  "next": null
}

Règles :

  • id — un identifiant stable, différent pour chaque fiche. C'est ce qui permet à une fiche modifiée de mettre à jour la même entrée plutôt que d'en créer une nouvelle.
  • Les noms de champs sont ceux de la référence des champs.
  • Les champs traduits prennent une clé par langue : title_fr, title_en, description_de… Une clé sans suffixe va à la langue par défaut du site.
  • Les images et fichiers sont des URL publiques. Ils sont téléchargés une fois, puis retéléchargés uniquement si l'URL change. Les liens de partage Google Drive et Dropbox sont acceptés.
  • Les catégories sont données par leur nom ("category": "Bachelor") ; les catégories manquantes sont créées.
  • Les dates sont au format ISO 8601. Les booléens sont true/false.
  • Les champs de texte enrichi acceptent le HTML ; il est nettoyé (pas de scripts, pas de gestionnaires d'événements). Le texte brut devient des paragraphes.
  • Ne renvoyez que ce qui peut être publié : les brouillons et données privées ne doivent pas apparaître dans le flux.

Garder le site à jour#

Le propriétaire du site choisit, par rubrique :

Option Effet
Toutes les heures / tous les jours NAMES LEGAL lit votre API selon un calendrier.
Seulement quand je le demande Un bouton dans la console.
Webhook Vous appelez l'adresse de webhook du site après chaque modification : synchronisation en moins d'une minute. Voir Webhooks.

Il choisit aussi ce qui se passe lorsqu'une fiche a changé des deux côtés (vos données l'emportent, le site l'emporte, ou on demande), et lorsqu'une fiche disparaît de votre flux (supprimer sur le site, masquer, ou conserver). Une synchronisation qui supprimerait une grande partie d'une rubrique s'arrête et demande d'abord confirmation.

Écrire en retour vers votre application (« mon site → ma source ») n'est pas encore disponible : le connecteur ne fait que lire.

Référence des champs#

Générée depuis la plateforme elle-même ; elle est toujours à jour. Les champs obligatoires doivent être présents sur chaque fiche (pour un champ traduit, dans au moins une langue).

Équipe team

ChampType de champObligatoireUn par langue
first_name
Prénom
text ≤ 100 ✓
last_name
Nom
text ≤ 100 ✓
position
Position
text ≤ 150 ✓
short_bio
Biographie courte
longtext ≤ 300
bio
Bio
html
profile_image
Image de profil
image ≤ 100
email
E-mail
email ≤ 254
phone
Téléphone
text ≤ 20
linkedin
Linkedin
url ≤ 200
website
Site web personnel
url ≤ 200
specialties
Spécialités
text ≤ 200
education
Éducation
text ≤ 200
location
Emplacement
text ≤ 100
years_experience
Années d'expérience
int
order
Ordre
int

Services services

ChampType de champObligatoireUn par langue
title
Titre
text ≤ 100 ✓ title_fr, title_en…
description
Description
longtext ✓ description_fr, description_en…
icon
Icône
text ≤ 50
category
Catégorie
category
is_featured
Service mis en avant
bool
order
Ordre
int

Projets projects

ChampType de champObligatoireUn par langue
title
Titre
text ≤ 150 ✓ title_fr, title_en…
description
Description courte
longtext ✓ description_fr, description_en…
detailed_description
Description détaillée
html detailed_description_fr, detailed_description_en…
category
Catégorie
category ✓
image
Image mise en avant
image ≤ 100
client
Client
text ≤ 100 client_fr, client_en…
project_date
Date du projet
text ≤ 20
duration
Durée
text ≤ 50 duration_fr, duration_en…
project_url
Url du projet en ligne
url ≤ 200
technologies
Technologies
text ≤ 200 technologies_fr, technologies_en…
tags
Tags
text ≤ 200 tags_fr, tags_en…
status
Statut
choice ≤ 20
completed, in_progress, on_hold, planning
is_featured
Projet mis en avant
bool
order
Ordre
int

Blog / actualités blog

ChampType de champObligatoireUn par langue
title
Titre
text ≤ 200 ✓ title_fr, title_en…
excerpt
Extrait
longtext ≤ 500 ✓ excerpt_fr, excerpt_en…
content
Contenu
html ✓ content_fr, content_en…
category
Catégorie
category ✓
featured_image
Image mise en avant
image ≤ 100
published_date
Date publiée
datetime
status
Statut
choice ≤ 20
draft, published, featured
order
Ordre
int

Événements events

ChampType de champObligatoireUn par langue
title
Titre
text ≤ 200 ✓ title_fr, title_en…
description
Description
html ✓ description_fr, description_en…
start_date
Date de début
datetime ✓
end_date
Date de fin
datetime ✓
location
Emplacement
text ≤ 200 ✓ location_fr, location_en…
is_online
Est en ligne
bool
event_type
Type d'événement
choice ≤ 20
conference, workshop, webinar, seminar, training, meeting
registration_url
Url d'enregistrement
url ≤ 200
meeting_url
Url de réunion
url ≤ 200
featured_image
Image mise en avant
image ≤ 100
is_featured
Mis en avant
bool
order
Ordre
int

FAQ faq

ChampType de champObligatoireUn par langue
question
Question
text ≤ 300 ✓ question_fr, question_en…
answer
Répondre
html ✓ answer_fr, answer_en…
category
Catégorie
category
is_featured
Mis en avant
bool
order
Ordre
int

Offres d'emploi jobs

ChampType de champObligatoireUn par langue
title
Intitulé du poste
text ≤ 200 ✓
category
Catégorie
category ✓
description
Description du poste
html ✓
requirements
Exigences
html ✓
responsibilities
Responsabilités
html
benefits
Avantages
html
location
Emplacement
text ≤ 200 ✓
contract_type
Type de contrat
choice ≤ 20
full_time, part_time, contract, freelance, internship, temporary
experience_level
Niveau d'expérience
choice ≤ 20
entry, junior, mid, senior, lead, executive
remote_option
Option de télétravail
choice ≤ 20
onsite, remote, hybrid
application_deadline
Application deadline
date
is_active
Actif
bool

Ressources resources

ChampType de champObligatoireUn par langue
title
Titre
text ≤ 200 ✓ title_fr, title_en…
description
Description
html ✓ description_fr, description_en…
file
Déposer
file ≤ 100 ✓
resource_type
Type de ressource
choice ≤ 20
guide, ebook, whitepaper, template, checklist, case_study
thumbnail
Vignette
image ≤ 100
order
Ordre
int

Publications publications

ChampType de champObligatoireUn par langue
title
Titre
text ≤ 255 ✓ title_fr, title_en…
authors
Auteurs
text ≤ 255 ✓ authors_fr, authors_en…
year
Année
text ≤ 10 ✓
journal
Journal
text ≤ 255 journal_fr, journal_en…
abstract
Abstrait
html abstract_fr, abstract_en…
link
Lien
url ≤ 200
category
Catégorie
category
is_featured
Publication mise en avant
bool
order
Ordre
int

Témoignages testimonials

ChampType de champObligatoireUn par langue
name
Nom
text ≤ 100 ✓ name_fr, name_en…
position
Position
text ≤ 100 ✓ position_fr, position_en…
testimonial
Témoignage
longtext ✓ testimonial_fr, testimonial_en…
rating
Notation
int
image
Image
image ≤ 100
order
Ordre
int

Compétences skills

ChampType de champObligatoireUn par langue
name
Nom
text ≤ 100 ✓ name_fr, name_en…
level
Niveau
int
order
Ordre
int

Chiffres clés stats

ChampType de champObligatoireUn par langue
title
Titre
text ≤ 100 ✓ title_fr, title_en…
value
Valeur
text ≤ 20 ✓
icon
Icône
text ≤ 50
order
Ordre
int