API développeurs
Pilotez vos CV et lettres par programme — création, édition, export PDF et PNG — sans passer par le site. Aucune fonctionnalité IA n'est exposée par l'API.
Démarrage rapide
Créez une clé depuis votre compte, puis authentifiez chaque requête avec l'en-tête Authorization: Bearer <clé>. Le secret n'est affiché qu'une seule fois à la création.
# Lister vos CV
curl https://www.unboncv.com/api/v1/cvs \
-H "Authorization: Bearer ubcv_live_..."
# Exporter un CV en PDF sans filigrane
curl -X POST https://www.unboncv.com/api/v1/cvs/CV_ID/pdf \
-H "Authorization: Bearer ubcv_live_..." \
-H "Content-Type: application/json" \
-d '{ "watermark": false }'Édition chirurgicale
Modifiez un champ, un item (jusqu'à 2 niveaux) ou déplacez une section — par opérations atomiques adressées par id, sans renvoyer tout le CV. Découvrez les champs et items via /api/v1/schema et /cvs/{id}/layout.
PATCH /api/v1/cvs/{id}/operations
{
"baseRevision": 7,
"operations": [
{ "op": "setPersonalInfo", "fields": { "phone": "+237 6 00 00 00 00" } },
{ "op": "updateItem", "section": "experience", "id": "exp_1",
"fields": { "company": "Orange CM" } },
{ "op": "updateItem", "section": "experience", "parentId": "exp_1",
"nested": "descriptions", "id": "d_2", "fields": { "value": "Nouvelle puce" } },
{ "op": "reorderItems", "section": "experience", "order": ["exp_2", "exp_1"] },
{ "op": "moveSection", "section": "skills-section", "direction": "left" },
{ "op": "setDesign", "set": { "themeId": "navy", "fontSizes": { "body": 12 } } }
]
}Tout le lot est appliqué en une transaction (verrou baseRevision) ; une cible invalide (item/section/ordre) échoue explicitement sans rien écrire.
Plusieurs lettres par CV
Un CV porte jusqu'à 10 lettres de motivation — une par entreprise ou poste visé. Le CV garde les objectifs globaux (applicationBrief : type de candidature, poste) ; chaque lettre a ses objectifs spécifiques (target : entreprise, description, destinataire, poste ajustable), son contenu, sa mise en page et son PDF.
# Une lettre pour Orange Cameroun…
curl -X POST https://www.unboncv.com/api/v1/cvs/CV_ID/letters \
-H "Authorization: Bearer ubcv_live_..." \
-H "Content-Type: application/json" \
-d '{ "label": "Orange — Développeur",
"target": { "company": "Orange Cameroun", "position": "Développeur web",
"companyDescription": "Opérateur télécom." } }'
# …une autre pour MTN, puis chacune son PDF
curl -X POST https://www.unboncv.com/api/v1/cvs/CV_ID/letters/LETTER_ID/pdf \
-H "Authorization: Bearer ubcv_live_..." \
-d '{ "watermark": false }'copyFromLetterId duplique une lettre existante (contenu + mise en page) pour l'adapter à une nouvelle cible. Les anciens endpoints /letter (singulier) restent servis et opèrent sur la lettre la plus récemment modifiée.
Enveloppe & erreurs
Succès : { "data": … }. Erreur : { "error": { "code", "message" } }.
401clé manquante / invalide ·403scope insuffisant ·402abonnement requis (export)404introuvable ·409conflit de version ·429limite de débit atteinte
Limites
- • 600 requêtes/minute par clé.
- • 120 exports/minute par utilisateur (PDF + PNG confondus).
- • Les exports nécessitent un abonnement actif.
Scopes
cv:readLire les CVcv:writeCréer / modifier / supprimer les CVpdf:exportExporter en PDF et en PNGletter:readLire les lettres d'un CVletter:writeCréer / modifier / dupliquer / supprimer les lettresaccount:readLire le compte (abonnement)Points de terminaison
/api/v1/cvscv:readLister les CV/api/v1/cvscv:writeCréer un CV (JSON structuré)/api/v1/cvs/{id}cv:readRécupérer un CV/api/v1/cvs/{id}cv:writeModifier en bloc (fusion partielle, baseRevision)/api/v1/cvs/{id}/operationscv:writeÉdition chirurgicale : opérations atomiques par id/api/v1/cvs/{id}cv:writeSupprimer un CV/api/v1/schema—Descripteur du document (champs, répéteurs, énums)/api/v1/templates—Catalogue des modèles/api/v1/themes—Thèmes disponibles (couleurs)/api/v1/templates/{id}/layout—Sections déplaçables et colonnes/api/v1/cvs/{id}/layoutcv:readArrangement courant résolu/api/v1/accountaccount:readAbonnement, plans, paiements, filigrane/api/v1/account/pdf-protectionaccount:writeDéfinir le texte de filigrane/api/v1/billing/checkoutbilling:writeSouscrire (paiement mobile money)/api/v1/billing/orders/{orderId}/statusbilling:writeVérifier / réconcilier un paiement/api/v1/cvs/{id}/pdfpdf:exportExporter en PDF (filigrane optionnel)/api/v1/cvs/{id}/pngpdf:exportExporter en PNG (une image par page)/api/v1/cvs/{id}/pdfcv:readRe-télécharger le dernier PDF exporté/api/v1/cvs/{id}/photocv:readURL signée de la photo/api/v1/cvs/{id}/photocv:writeTéléverser la photo (multipart)/api/v1/cvs/{id}/photocv:writeRetirer la photo/api/v1/cvs/{id}/lettersletter:readLister les lettres du CV (jusqu'à 10)/api/v1/cvs/{id}/lettersletter:writeCréer une lettre (cible par lettre, ou duplication)/api/v1/cvs/{id}/letters/{letterId}letter:readÉtat d'une lettre/api/v1/cvs/{id}/letters/{letterId}letter:writeModifier une lettre (blocs, mise en page, label, cible)/api/v1/cvs/{id}/letters/{letterId}letter:writeSupprimer une lettre (et son PDF)/api/v1/cvs/{id}/letters/{letterId}/pdfpdf:exportExporter une lettre en PDFDétail des corps de requête et des réponses dans la référence interactive.