Aller au contenu principal
NATPNATP

Integrations

API publique & SDK

La plateforme expose des API REST simples protégées par des comptes machine (Basic Auth). Générez vos identifiants dans /admin/integrations, sélectionnez les scopes (projets, ressources, tâches, finances, logs) et implémentez le SDK Node/Python ou vos propres requêtes HTTP.

Authentification

  • Type : HTTP Basic — Authorization: Basic base64(client_id:client_secret)
  • Provision : admin ➜ Intégrations ➜ “Créer un compte machine”.
  • Scopes : choisissez les portées exactes (lecture contenu ressource, review tâches, finance…).

SDK officiels

  • @natp/sdk (Node.js, ESM + CJS) – helpers projets/tâches/finance.
  • natp-sdk (Python) – clients typés + pagination utilitaires.
  • Chaque SDK charge automatiquement .natp ou variables d’environnement pour le Basic Auth.

Endpoints clés

GET /api/integrations/projects

Lister les projets visibles, leur organisation, type et quelques indicateurs.

projects:read

Paramètres

  • orgId(query)Filtrer sur une organisation précise.
  • q(query)Recherche sur le nom, slug ou description.
  • limit(query)Pagination (max 100, défaut 20).

GET /api/integrations/resources

Parcourir les ressources (fichiers, datasets) associées aux projets autorisés.

resources:read

Paramètres

  • orgId(query)Limiter aux ressources d’une organisation.
  • q(query)Recherche sur nom, slug, MIME ou langue.
  • limit(query)Pagination (max 100).

GET /api/integrations/resources/{id}/content

Récupérer le contenu brut (segments) d’une ressource et ses métadonnées.

resources:read-content

Paramètres

  • id(path, requis)Identifiant ou slug de la ressource.
  • limit(query)Nombre d’items/segments à retourner (max 500).

GET /api/integrations/resources/{id}/annotations

Lire les couches d’annotation (POS, NER, review) liées à une ressource.

resources:annotations:read

Paramètres

  • id(path, requis)Identifiant ou slug de la ressource.
  • limit(query)Nombre de couches à retourner (max 500).

GET /api/integrations/tasks

Suivre les tâches (type, statut, assignation) sur les projets autorisés.

tasks:read

Paramètres

  • orgId(query)Limiter aux tâches d’une organisation.
  • projectId(query)Limiter à un projet particulier.
  • status(query)Filtrer par statut (TODO, IN_PROGRESS, …).
  • type(query)Filtrer par type (TRANSLATION, REVIEW, POS, …).
  • limit(query)Pagination (max 100).

GET /api/integrations/tasks/{taskId}/content

Obtenir la payload d’une tâche (segments, ressource liée, metadata).

tasks:read-content

Paramètres

  • taskId(path, requis)Identifiant de la tâche.
  • items(query)Nombre de segments à retourner (max 500).

GET /api/integrations/tasks/{taskId}/annotations

Lire les annotations/reviews déposées sur la ressource d’une tâche.

tasks:annotations:read

Paramètres

  • taskId(path, requis)Identifiant de la tâche.
  • limit(query)Nombre d’annotations (max 500).

POST /api/integrations/tasks/{taskId}/status

Changer le statut d’une tâche (TODO → DONE). Scope supplémentaire requis pour REVIEW/DONE.

tasks:writetasks:review:write?

Paramètres

  • taskId(path, requis)Identifiant de la tâche.
  • status(body, requis)Valeur TODO | IN_PROGRESS | REVIEW | DONE.

GET /api/integrations/finance/summary

Synthèse budgétaire/consommation par organisation et projet.

finance:read

Paramètres

  • orgId(query)Limiter à une organisation.

GET /api/integrations/logs

Consulter les journaux d’audit filtrés par organisation/projet.

logs:read

Paramètres

  • orgId(query)Limiter aux actions d’une organisation.
  • projectId(query)Limiter à un projet.
  • action(query)Filtrer par type d’évènement (TASK_STATUS_UPDATED, …).
  • limit(query)Pagination (max 100).

cURL

# Auth via compte machine créé dans /admin/integrations
CLIENT_ID="ma_xxxxx"
CLIENT_SECRET="••••••"

curl https://app.example.org/api/integrations/projects \
  -H "Authorization: Basic $(printf "$CLIENT_ID:$CLIENT_SECRET" | base64)"

Node.js

import fetch from 'node-fetch';

const auth = Buffer.from(`${process.env.NATP_CLIENT_ID}:${process.env.NATP_CLIENT_SECRET}`).toString('base64');

const res = await fetch('https://app.example.org/api/integrations/tasks', {
  headers: { Authorization: `Basic ${auth}` },
});
const { tasks } = await res.json();
console.table(tasks.map(({ title, status }) => ({ title, status })));

Python

import os
import base64
import requests

auth = base64.b64encode(f"{os.environ['NATP_CLIENT_ID']}:{os.environ['NATP_CLIENT_SECRET']}".encode()).decode()
resp = requests.get(
    'https://app.example.org/api/integrations/resources',
    headers={'Authorization': f'Basic {auth}'},
)
resp.raise_for_status()
for resource in resp.json().get('resources', []):
    print(resource['slug'], resource['mime'], resource['updatedAt'])

Portées disponibles

Attribuez uniquement les accès nécessaires.
ScopeDescription
projects:readLister les projets, récupérer leurs métadonnées et états.
projects:writeCréer ou modifier la configuration des projets et de leurs webhooks.
resources:readConsulter les ressources et jeux de données associés aux projets.
resources:writeCréer, mettre à jour ou supprimer des ressources et lancer des imports.
resources:read-contentAccéder aux fichiers, items et métadonnées brutes des ressources.
resources:annotations:readLire les couches d’annotation et données d’évaluation liées aux ressources.
resources:annotations:writeAjouter ou modifier des annotations au niveau ressource.
tasks:readLister les tâches, leurs affectations et leurs progrès.
tasks:writeChanger le statut, assigner ou déclencher des actions de tâches.
tasks:read-contentLire la charge utile, les segments de traduction et les supports associés.
tasks:annotations:readLire les feedbacks, revues et annotations liées à une tâche.
tasks:annotations:writeDéposer des annotations, revues ou corrections sur une tâche.
tasks:review:writeChanger l’état des revues, approuver/rejeter des traductions.
finance:readLire les mouvements financiers et les agrégats budgétaires.
logs:readConsulter les journaux d’audit et les évènements critiques.

OpenAPI & Postman

Importez directement le fichier integrations.yaml dans votre client (Insomnia, Postman, Bruno). Les scopes requis sont listés dans les descriptions d’endpoint. Pensez à stocker vos secrets machine dans un gestionnaire de secrets.