Developers

Conector de datos#

El conector de datos rellena un sitio NAMES LEGAL con datos que ya existen en otro lugar, sin código por parte del propietario del sitio. El propietario conecta una fuente en su consola (Integraciones → Importar mis datos), enlaza columnas con campos arrastrando y soltando, realiza una prueba y lanza. Las fuentes pueden ser archivos o una API — la suya.

Esta página es para desarrolladores de aplicaciones que quieren ser una fuente: lo que NAMES LEGAL espera de su API, y cómo hacer que la conexión sea automática.

Cómo lee el conector su API#

El propietario del sitio introduce:

  • la dirección de su API,
  • un modo de autenticación y su secreto,
  • opcionalmente, dónde está la lista en su respuesta (data.items).

NAMES LEGAL entonces llama a su API por HTTPS con GET, sigue la paginación, y convierte cada objeto en una ficha. Los objetos anidados se aplanan (author.name), las listas de valores simples se unen con comas.

Autenticación#

Modo Qué se envía
Ninguno nada
Clave en un encabezado <Header-Name>: <key> (por defecto X-API-Key)
Clave en la dirección ?<param>=<key> (por defecto api_key)
Token Bearer Authorization: Bearer <token>
Usuario y contraseña Authorization: Basic …

Los secretos se almacenan cifrados y nunca vuelven a mostrarse en la consola. Dé a los propietarios de sitios una clave de solo lectura limitada al contenido publicado: el conector solo lee.

Encontrar la lista#

Si no se indica ninguna ruta, el conector toma, en este orden: el array items, luego el primer array de objetos encontrado en la respuesta. Un array JSON simple también funciona.

Paginación#

Cualquiera de estos se sigue automáticamente, hasta 200 páginas:

  • un encabezado HTTP Link: <…>; rel="next";
  • una URL de página siguiente en el cuerpo: next, next_url, next_page_url, links.next, meta.next, pagination.next;
  • un cursor en el cuerpo: next_cursor, meta.next_cursor, pagination.next_cursor — devuelto como ?cursor=.

Se detiene al devolver una lista vacía o ningún enlace siguiente.

Límites#

  • 5000 fichas por conjunto de datos y sincronización.
  • 10 MB por respuesta, 15 segundos por solicitud.
  • Las direcciones deben ser públicas: se rechazan las direcciones privadas y de red local, redirecciones incluidas. En una redirección a otro host, su clave no se reenvía.

El formato de feed de NAMES LEGAL#

Exponga sus datos en este formato y el propietario del sitio no tendrá nada que enlazar: cada colección se convierte en un conjunto de datos ya conectado a la sección correspondiente del sitio.

1. Un índice#

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/"
  }
}

Los nombres de colección son las claves de sección listadas en la referencia de campos más abajo (team, services, blog, events, faq, jobs…). Las URL pueden ser relativas al índice.

2. Una lista por colección#

{
  "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
}

Reglas:

  • id — un identificador estable, distinto en cada ficha. Es lo que permite que una ficha editada actualice la misma entrada en lugar de crear una nueva.
  • Los nombres de campo son los de la referencia de campos.
  • Los campos traducidos llevan una clave por idioma: title_fr, title_en, description_de… Una clave sin sufijo va al idioma predeterminado del sitio.
  • Las imágenes y archivos son URL públicas. Se descargan una vez y vuelven a descargarse solo cuando la URL cambia. Se aceptan enlaces compartidos de Google Drive y Dropbox.
  • Las categorías se indican por nombre ("category": "Bachelor"); las categorías inexistentes se crean.
  • Las fechas están en ISO 8601. Los booleanos son true/false.
  • Los campos de texto enriquecido aceptan HTML; se limpia (sin scripts, sin manejadores de eventos). El texto plano se convierte en párrafos.
  • Devuelva solo lo que pueda publicarse: los borradores y los datos privados no deben aparecer en el feed.

Mantener el sitio actualizado#

El propietario del sitio elige, por sección:

Opción Efecto
Cada hora / cada día NAMES LEGAL lee su API según un horario.
Solo cuando yo lo pida Un botón en la consola.
Webhook Usted llama a la dirección de webhook del sitio después de cada cambio: sincronización en menos de un minuto. Vea Webhooks.

También eligen qué ocurre cuando una ficha cambió en ambos lados (ganan sus datos, gana el sitio, o se pregunta), y cuándo una ficha desaparece de su feed (se elimina en el sitio, se oculta, o se conserva). Una sincronización que eliminaría una gran parte de una sección se detiene y pide confirmación primero.

Escribir de vuelta hacia su aplicación («mi sitio → mi fuente») todavía no está disponible: el conector solo lee.

Referencia de campos#

Generada desde la propia plataforma; siempre está actualizada. Los campos obligatorios deben estar presentes en cada ficha (para un campo traducido, en al menos un idioma).

Tamaño del equipo team

CampoTipo de campoObligatorioUno por idioma
first_name
Nombre
text ≤ 100
last_name
Apellidos
text ≤ 100
position
Posición
text ≤ 150
short_bio
Biografía breve
longtext ≤ 300
bio
Biografía
html
profile_image
Imagen de perfil
image ≤ 100
email
Correo
email ≤ 254
phone
Teléfono
text ≤ 20
linkedin
Linkedin
url ≤ 200
website
Sitio web personal
url ≤ 200
specialties
Especialidades
text ≤ 200
education
Educación
text ≤ 200
location
Ubicación
text ≤ 100
years_experience
Años de experiencia
int
order
Orden
int

Servicios services

CampoTipo de campoObligatorioUno por idioma
title
Título
text ≤ 100 title_fr, title_en
description
Descripción
longtext description_fr, description_en
icon
Icono
text ≤ 50
category
Categoría
category
is_featured
Servicio destacado
bool
order
Orden
int

Proyectos projects

CampoTipo de campoObligatorioUno por idioma
title
Título
text ≤ 150 title_fr, title_en
description
Descripción breve
longtext description_fr, description_en
detailed_description
Descripción detallada
html detailed_description_fr, detailed_description_en
category
Categoría
category
image
Imagen destacada
image ≤ 100
client
Cliente
text ≤ 100 client_fr, client_en
project_date
Fecha de proyecto
text ≤ 20
duration
Duración
text ≤ 50 duration_fr, duration_en
project_url
Url del proyecto en vivo
url ≤ 200
technologies
Tecnologías
text ≤ 200 technologies_fr, technologies_en
tags
Etiquetas
text ≤ 200 tags_fr, tags_en
status
Estado
choice ≤ 20
completed, in_progress, on_hold, planning
is_featured
Proyecto destacado
bool
order
Orden
int

Blog / noticias blog

CampoTipo de campoObligatorioUno por idioma
title
Título
text ≤ 200 title_fr, title_en
excerpt
Extracto
longtext ≤ 500 excerpt_fr, excerpt_en
content
Contacto
html content_fr, content_en
category
Categoría
category
featured_image
Imagen destacada
image ≤ 100
published_date
Fecha publicada
datetime
status
Estado
choice ≤ 20
draft, published, featured
order
Orden
int

Eventos events

CampoTipo de campoObligatorioUno por idioma
title
Título
text ≤ 200 title_fr, title_en
description
Descripción
html description_fr, description_en
start_date
Fecha de inicio
datetime
end_date
Fecha de fin
datetime
location
Ubicación
text ≤ 200 location_fr, location_en
is_online
Está en línea
bool
event_type
Tipo de evento
choice ≤ 20
conference, workshop, webinar, seminar, training, meeting
registration_url
Url de registro
url ≤ 200
meeting_url
Url de reunión
url ≤ 200
featured_image
Imagen destacada
image ≤ 100
is_featured
Destacado
bool
order
Orden
int

Preguntas frecuentes faq

CampoTipo de campoObligatorioUno por idioma
question
Pregunta
text ≤ 300 question_fr, question_en
answer
Respuesta
html answer_fr, answer_en
category
Categoría
category
is_featured
Destacado
bool
order
Orden
int

Ofertas de empleo jobs

CampoTipo de campoObligatorioUno por idioma
title
Título del puesto
text ≤ 200
category
Categoría
category
description
Descripción del puesto
html
requirements
Requisitos
html
responsibilities
Responsabilidades
html
benefits
Beneficios
html
location
Ubicación
text ≤ 200
contract_type
Tipo de contrato
choice ≤ 20
full_time, part_time, contract, freelance, internship, temporary
experience_level
Nivel de experiencia
choice ≤ 20
entry, junior, mid, senior, lead, executive
remote_option
Opción de trabajo remoto
choice ≤ 20
onsite, remote, hybrid
application_deadline
Application deadline
date
is_active
Activo
bool

Recursos resources

CampoTipo de campoObligatorioUno por idioma
title
Título
text ≤ 200 title_fr, title_en
description
Descripción
html description_fr, description_en
file
Archivo
file ≤ 100
resource_type
Tipo de recurso
choice ≤ 20
guide, ebook, whitepaper, template, checklist, case_study
thumbnail
Uña del pulgar
image ≤ 100
order
Orden
int

Publicaciones publications

CampoTipo de campoObligatorioUno por idioma
title
Título
text ≤ 255 title_fr, title_en
authors
Autores
text ≤ 255 authors_fr, authors_en
year
Año
text ≤ 10
journal
Diario
text ≤ 255 journal_fr, journal_en
abstract
Abstracto
html abstract_fr, abstract_en
link
Enlace
url ≤ 200
category
Categoría
category
is_featured
Publicación destacada
bool
order
Orden
int

Testimonios testimonials

CampoTipo de campoObligatorioUno por idioma
name
Nombre
text ≤ 100 name_fr, name_en
position
Posición
text ≤ 100 position_fr, position_en
testimonial
Testimonial
longtext testimonial_fr, testimonial_en
rating
Clasificación
int
image
Imagen
image ≤ 100
order
Orden
int

Habilidades skills

CampoTipo de campoObligatorioUno por idioma
name
Nombre
text ≤ 100 name_fr, name_en
level
Nivel
int
order
Orden
int

Cifras clave stats

CampoTipo de campoObligatorioUno por idioma
title
Título
text ≤ 100 title_fr, title_en
value
Valor
text ≤ 20
icon
Icono
text ≤ 50
order
Orden
int