P
Parsyn
/Docs
Retour à l'accueil

Reference de l'API REST

Reference complete de l'API Parsyn accessible a https://parsyn.progatis.com/api/v1. Tous les endpoints necessitent une authentification sauf mention contraire.

La plupart des utilisateurs interagissent avec Parsyn via le dashboard. Cette reference d'API s'adresse aux developpeurs qui souhaitent creer des integrations, automatiser des workflows ou ecrire des scripts pour interagir avec la plateforme.

Authentification

L'API utilise des bearer tokens JWT :

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

Les tokens sont aussi definis comme cookies httpOnly lors de la connexion, ce qui permet au dashboard de s'authentifier automatiquement.

Cycle de vie des tokens

Type de tokenDuree de vieUtilisation
Access token30 minutesAuthentification API
Refresh token7 joursObtenir de nouveaux access tokens sans se reconnecter
Partial token5 minutesEtat intermediaire pendant la verification 2FA
WebSocket token60 secondesToken a usage unique pour le handshake WebSocket du dashboard

Auth

Inscription

POST/auth/register
{
  "email": "[email protected]",
  "password": "securePassword123",
  "username": "johndoe"
}

// Response 201
{
  "id": 1,
  "email": "[email protected]",
  "username": "johndoe",
  "created_at": "2026-03-10T14:30:00Z"
}

Connexion

POST/auth/login
{
  "email": "[email protected]",
  "password": "securePassword123"
}

// Response 200
{
  "access_token": "eyJhbGci...",
  "refresh_token": "eyJhbGci...",
  "token_type": "bearer",
  "user": {
    "id": 1,
    "email": "[email protected]",
    "username": "johndoe"
  }
}

Refresh token

POST/auth/refresh

Utilisateur courant

GET/auth/me

Mise a jour du profil

PATCH/auth/me/locale

Sessions

GET/auth/sessions
DELETE/auth/sessions/{session_id}
POST/auth/sessions/revoke-others

Lister les sessions actives, revoquer une session specifique, ou revoquer toutes les sessions sauf la session en cours.

Authentification a deux facteurs

POST/2fa/totp/setup
POST/2fa/totp/verify-setup
POST/2fa/backup-codes/regenerate

Datasets

Lister les datasets

GET/datasets?page=1&per_page=20&search=customer

Creer un dataset

POST/datasets

Consulter / Modifier / Supprimer un dataset

GET/datasets/{id}
PATCH/datasets/{id}
DELETE/datasets/{id}

Flux d'upload

POST/datasets/upload/initiate
POST/datasets/upload/confirm
POST/datasets/upload/confirm

Operations

POST/datasets/{id}/validate
POST/datasets/{id}/preprocess/sample
GET/datasets/{id}/statistics
GET/datasets/{id}/statistics
POST/datasets/{id}/preprocess/convert
POST/datasets/{id}/preprocess/split
POST/datasets/{id}/preprocess/deduplicate
POST/datasets/{id}/preprocess/normalize

Modeles

GET/models?page=1&per_page=20&status=ready
POST/models
// From HuggingFace
{ "name": "llama-3.1-8b", "huggingface_id": "meta-llama/Llama-3.1-8B" }

// Custom upload
{ "name": "my-custom-model", "description": "Proprietary architecture" }
GET/models/{id}
PATCH/models/{id}
DELETE/models/{id}

Training Jobs

Lister les workers disponibles

GET/training-jobs/available-workers

Renvoie les workers (vos propres workers et les Parsyn Workers) disponibles pour l'assignation de jobs.

Lister / Creer / Consulter

GET/training-jobs?page=1&per_page=20&status=running
POST/training-jobs
{
  "name": "llama-customer-support-v1",
  "dataset_id": 42,
  "model_id": 7,
  "config": {
    "epochs": 3,
    "batch_size": 4,
    "learning_rate": 2e-4,
    "max_length": 1024,
    "mixed_precision": "bf16",
    "use_peft": true,
    "lora_r": 16
  },
  "worker_selection": {
    "mode": "auto"
  }
}
GET/training-jobs/{id}

Demarrer / Annuler / Supprimer

POST/training-jobs/{id}/start
DELETE/training-jobs/{id}

Metriques

GET/training-jobs/{id}/metrics
GET/training-jobs/{id}/metrics

Workers (vos GPUs)

GET/workers?page=1&per_page=20

Les workers sont crees automatiquement via le flux d'enrolement (WebSocket /ws/worker avec une cle enroll_...). Il n'y a pas d'endpoint de creation manuelle.

GET/workers/{id}
PATCH/workers/{id}
DELETE/workers/{id}
GET/workers/connected

Cles d'enrolement principales

POST/master-keys
{
  "name": "production-fleet",
  "auto_name_prefix": "prod-worker",
  "default_worker_type": "both",
  "max_enrollments": 50,
  "expires_at": "2027-01-01T00:00:00Z"
}
GET/master-keys
DELETE/master-keys/{id}

Chat / Inference

Discuter avec un modele

POST/chat/models/{model_id}/chat
{
  "message": "Explain gradient descent in simple terms.",
  "temperature": 0.7,
  "max_tokens": 500,
  "top_p": 0.9,
  "top_k": 50,
  "repetition_penalty": 1.1,
  "conversation_id": null
}

Renvoie un flux SSE avec Accept: text/event-stream, ou du JSON dans le cas contraire. Necessite un worker utilisateur en ligne avec la capacite prompter ou both.

Comparer des modeles

POST/chat/models/{model_id}/compare
{
  "message": "What is overfitting?",
  "compare_model_id": 8,
  "temperature": 0.7
}

Credits

Consulter le solde

GET/credits/balance
// Response
{ "balance": 5000 }

Acheter des credits

POST/subscriptions/checkout

Initie une session de paiement Stripe pour le pack de credits selectionne.

Estimer le cout d'un job

POST/credits/estimate-job
{
  "gpu_type": "a100_80gb",
  "estimated_hours": 2
}

// Response
{ "estimated_credits": 400, "credits_per_hour": 200 }

Historique des transactions

GET/credits/transactions?page=1&type=deduction

Packs de credits

GET/credits/packs

Evaluations

POST/evaluation-suites
GET/evaluation-suites
GET/evaluations/models/{model_id}
POST/evaluation-suites/runs/{run_id}/cancel

Suites d'evaluation

GET/evaluation-suites
POST/evaluation-suites
GET/evaluation-suites/{id}
PATCH/evaluation-suites/{id}
DELETE/evaluation-suites/{id}
POST/evaluation-suites/{id}/run
GET/evaluation-suites/{id}/runs
GET/evaluation-suites/runs/{run_id}

Pipelines

Les pipelines automatisent des workflows multi-etapes : entrainer, evaluer, exporter. Chaque etape depend de la precedente.

GET/pipelines
POST/pipelines
GET/pipelines/{id}
DELETE/pipelines/{id}
POST/pipelines/{id}/start
POST/pipelines/{id}/cancel

Donnees synthetiques

Generez, augmentez, paraphrasez ou filtrez des datasets en utilisant un LLM comme backend de generation.

GET/synthetic-data
POST/synthetic-data
{
  "name": "augment-customer-support",
  "job_type": "augment",
  "source_dataset_id": 42,
  "target_count": 5000,
  "llm_provider": "openai",
  "llm_model": "gpt-4o"
}

Types de job disponibles : generate, augment, paraphrase, filter.

GET/synthetic-data/{id}
POST/synthetic-data/{id}/cancel

Export de modeles

Exportez un modele fine-tune vers un format optimise pour l'inference.

POST/models/{model_id}/exports
{
  "export_type": "gguf",
  "quantization": "q4_k_m"
}

Formats supportes : gguf (llama.cpp), onnx, gptq, awq.

GET/models/{model_id}/exports
GET/models/{model_id}/exports/{export_id}
GET/models/{model_id}/exports/{export_id}/download
POST/models/{model_id}/exports/model-card

Organisations

Les organisations regroupent des utilisateurs en equipes et partagent les ressources (datasets, modeles, jobs) au niveau projet.

POST/organizations
GET/organizations
GET/organizations/{id}
PATCH/organizations/{id}
DELETE/organizations/{id}

Equipes

POST/organizations/{id}/teams
GET/organizations/{id}/teams

Membres d'une equipe

POST/organizations/{id}/teams/{team_id}/members
GET/organizations/{id}/teams/{team_id}/members
PATCH/organizations/{id}/teams/{team_id}/members/{user_id}
DELETE/organizations/{id}/teams/{team_id}/members/{user_id}

Projets

POST/organizations/{id}/teams/{team_id}/projects
GET/organizations/{id}/teams/{team_id}/projects

Abonnements

Les plans d'abonnement definissent des quotas (jobs simultanes, stockage, etc.) en complement de la facturation au credit.

GET/subscriptions/me
POST/subscriptions/checkout

Initie une session de paiement Stripe pour souscrire ou changer de plan.

POST/subscriptions/portal

Ouvre le portail Stripe pour gerer l'abonnement en cours (annulation, mise a jour du moyen de paiement).

GET/plans

Liste les plans disponibles avec leurs quotas et tarifs.

Presets d'entrainement

Configurations d'entrainement preconfigrees (templates) que vous pouvez appliquer directement lors de la creation d'un training job.

GET/training-presets
GET/training-presets/{id}

Arena

GET/arena/matches
GET/arena/matches
POST/arena/matches/{id}/vote
GET/arena/leaderboard

Pagination

Tous les endpoints de liste renvoient des resultats pagines :

{
  "items": [...],
  "total": 150,
  "page": 1,
  "per_page": 20
}

Taille de page par defaut : 20, maximum : 100.

Reponses d'erreur

{ "detail": "Dataset not found", "status_code": 404 }
CodeSignification
400Request invalide (erreur de validation, champ manquant)
401Non authentifie (token manquant ou expire)
403Acces interdit (permissions ou credits insuffisants)
404Ressource introuvable (ou appartient a un autre utilisateur)
409Conflit (ressource en doublon, transition d'etat invalide)
422Erreur de validation (schema non conforme)
429Limite de requetes depassee (endpoints auth : 10 req/min)
500Erreur interne du serveur