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
| Campo | Tipo de campo | Obligatorio | Uno por idioma |
|---|---|---|---|
first_nameNombre |
text ≤ 100 | ✓ | |
last_nameApellidos |
text ≤ 100 | ✓ | |
positionPosición |
text ≤ 150 | ✓ | |
short_bioBiografía breve |
longtext ≤ 300 | ||
bioBiografía |
html | ||
profile_imageImagen de perfil |
image ≤ 100 | ||
emailCorreo |
email ≤ 254 | ||
phoneTeléfono |
text ≤ 20 | ||
linkedin |
url ≤ 200 | ||
websiteSitio web personal |
url ≤ 200 | ||
specialtiesEspecialidades |
text ≤ 200 | ||
educationEducación |
text ≤ 200 | ||
locationUbicación |
text ≤ 100 | ||
years_experienceAños de experiencia |
int | ||
orderOrden |
int |
Servicios services
| Campo | Tipo de campo | Obligatorio | Uno por idioma |
|---|---|---|---|
titleTítulo |
text ≤ 100 | ✓ | title_fr, title_en… |
descriptionDescripción |
longtext | ✓ | description_fr, description_en… |
iconIcono |
text ≤ 50 | ||
categoryCategoría |
category | ||
is_featuredServicio destacado |
bool | ||
orderOrden |
int |
Proyectos projects
| Campo | Tipo de campo | Obligatorio | Uno por idioma |
|---|---|---|---|
titleTítulo |
text ≤ 150 | ✓ | title_fr, title_en… |
descriptionDescripción breve |
longtext | ✓ | description_fr, description_en… |
detailed_descriptionDescripción detallada |
html | detailed_description_fr, detailed_description_en… |
|
categoryCategoría |
category | ✓ | |
imageImagen destacada |
image ≤ 100 | ||
clientCliente |
text ≤ 100 | client_fr, client_en… |
|
project_dateFecha de proyecto |
text ≤ 20 | ||
durationDuración |
text ≤ 50 | duration_fr, duration_en… |
|
project_urlUrl del proyecto en vivo |
url ≤ 200 | ||
technologiesTecnologías |
text ≤ 200 | technologies_fr, technologies_en… |
|
tagsEtiquetas |
text ≤ 200 | tags_fr, tags_en… |
|
statusEstado |
choice ≤ 20completed, in_progress, on_hold, planning |
||
is_featuredProyecto destacado |
bool | ||
orderOrden |
int |
Blog / noticias blog
| Campo | Tipo de campo | Obligatorio | Uno por idioma |
|---|---|---|---|
titleTítulo |
text ≤ 200 | ✓ | title_fr, title_en… |
excerptExtracto |
longtext ≤ 500 | ✓ | excerpt_fr, excerpt_en… |
contentContacto |
html | ✓ | content_fr, content_en… |
categoryCategoría |
category | ✓ | |
featured_imageImagen destacada |
image ≤ 100 | ||
published_dateFecha publicada |
datetime | ||
statusEstado |
choice ≤ 20draft, published, featured |
||
orderOrden |
int |
Eventos events
| Campo | Tipo de campo | Obligatorio | Uno por idioma |
|---|---|---|---|
titleTítulo |
text ≤ 200 | ✓ | title_fr, title_en… |
descriptionDescripción |
html | ✓ | description_fr, description_en… |
start_dateFecha de inicio |
datetime | ✓ | |
end_dateFecha de fin |
datetime | ✓ | |
locationUbicación |
text ≤ 200 | ✓ | location_fr, location_en… |
is_onlineEstá en línea |
bool | ||
event_typeTipo de evento |
choice ≤ 20conference, workshop, webinar, seminar, training, meeting |
||
registration_urlUrl de registro |
url ≤ 200 | ||
meeting_urlUrl de reunión |
url ≤ 200 | ||
featured_imageImagen destacada |
image ≤ 100 | ||
is_featuredDestacado |
bool | ||
orderOrden |
int |
Preguntas frecuentes faq
| Campo | Tipo de campo | Obligatorio | Uno por idioma |
|---|---|---|---|
questionPregunta |
text ≤ 300 | ✓ | question_fr, question_en… |
answerRespuesta |
html | ✓ | answer_fr, answer_en… |
categoryCategoría |
category | ||
is_featuredDestacado |
bool | ||
orderOrden |
int |
Ofertas de empleo jobs
| Campo | Tipo de campo | Obligatorio | Uno por idioma |
|---|---|---|---|
titleTítulo del puesto |
text ≤ 200 | ✓ | |
categoryCategoría |
category | ✓ | |
descriptionDescripción del puesto |
html | ✓ | |
requirementsRequisitos |
html | ✓ | |
responsibilitiesResponsabilidades |
html | ||
benefitsBeneficios |
html | ||
locationUbicación |
text ≤ 200 | ✓ | |
contract_typeTipo de contrato |
choice ≤ 20full_time, part_time, contract, freelance, internship, temporary |
||
experience_levelNivel de experiencia |
choice ≤ 20entry, junior, mid, senior, lead, executive |
||
remote_optionOpción de trabajo remoto |
choice ≤ 20onsite, remote, hybrid |
||
application_deadlineApplication deadline |
date | ||
is_activeActivo |
bool |
Recursos resources
| Campo | Tipo de campo | Obligatorio | Uno por idioma |
|---|---|---|---|
titleTítulo |
text ≤ 200 | ✓ | title_fr, title_en… |
descriptionDescripción |
html | ✓ | description_fr, description_en… |
fileArchivo |
file ≤ 100 | ✓ | |
resource_typeTipo de recurso |
choice ≤ 20guide, ebook, whitepaper, template, checklist, case_study |
||
thumbnailUña del pulgar |
image ≤ 100 | ||
orderOrden |
int |
Publicaciones publications
| Campo | Tipo de campo | Obligatorio | Uno por idioma |
|---|---|---|---|
titleTítulo |
text ≤ 255 | ✓ | title_fr, title_en… |
authorsAutores |
text ≤ 255 | ✓ | authors_fr, authors_en… |
yearAño |
text ≤ 10 | ✓ | |
journalDiario |
text ≤ 255 | journal_fr, journal_en… |
|
abstractAbstracto |
html | abstract_fr, abstract_en… |
|
linkEnlace |
url ≤ 200 | ||
categoryCategoría |
category | ||
is_featuredPublicación destacada |
bool | ||
orderOrden |
int |
Testimonios testimonials
| Campo | Tipo de campo | Obligatorio | Uno por idioma |
|---|---|---|---|
nameNombre |
text ≤ 100 | ✓ | name_fr, name_en… |
positionPosición |
text ≤ 100 | ✓ | position_fr, position_en… |
testimonialTestimonial |
longtext | ✓ | testimonial_fr, testimonial_en… |
ratingClasificación |
int | ||
imageImagen |
image ≤ 100 | ||
orderOrden |
int |
Habilidades skills
| Campo | Tipo de campo | Obligatorio | Uno por idioma |
|---|---|---|---|
nameNombre |
text ≤ 100 | ✓ | name_fr, name_en… |
levelNivel |
int | ||
orderOrden |
int |
Cifras clave stats
| Campo | Tipo de campo | Obligatorio | Uno por idioma |
|---|---|---|---|
titleTítulo |
text ≤ 100 | ✓ | title_fr, title_en… |
valueValor |
text ≤ 20 | ✓ | |
iconIcono |
text ≤ 50 | ||
orderOrden |
int |