{"openapi":"3.1.0","info":{"title":"Ebolem API","version":"1.0.0","description":"API universelle non-IA de stockage, édition et rendu de CV et lettres de motivation."},"servers":[{"url":"https://api.ebolem.oplide.com","description":"Production"}],"security":[{"bearerAuth":[],"appId":[]}],"tags":[{"name":"Découverte"},{"name":"CV"},{"name":"Photo"},{"name":"Rendu persistant"},{"name":"Lettre"},{"name":"Rendu stateless"}],"paths":{"/v1/schema":{"get":{"summary":"Décrire le document éditable","tags":["Découverte"],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/themes":{"get":{"summary":"Lister les thèmes","tags":["Découverte"],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/markets":{"get":{"summary":"Lister les marchés","tags":["Découverte"],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/templates":{"get":{"summary":"Lister les modèles activés","tags":["Découverte"],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/templates/{id}/layout":{"get":{"summary":"Décrire le layout d’un modèle","tags":["Découverte"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/templates/{id}/document":{"get":{"summary":"Lire le document TDL d’un modèle importé","tags":["Découverte"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs":{"get":{"summary":"Lister les CV de l’application","tags":["CV"],"parameters":[{"name":"ownerRef","in":"query","schema":{"type":"string","maxLength":190}},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"cvs":{"type":"array","items":{"$ref":"#/components/schemas/CvSummary"}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"summary":"Créer un CV","tags":["CV"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"additionalProperties":false,"properties":{"id":{"type":"string","minLength":8,"maxLength":190,"pattern":"^[A-Za-z0-9_-]+$","description":"Identifiant client facultatif. Un rejeu sous la même application et le même ownerRef renvoie le CV existant."},"ownerRef":{"type":["string","null"],"maxLength":190},"title":{"type":"string"},"data":{"type":"object","additionalProperties":true,"description":"Document CV structuré décrit par GET /v1/schema."},"sourceData":{"type":["object","null"],"additionalProperties":true,"description":"Source éditoriale opaque du client, versionnée avec le document mais jamais utilisée par le rendu."}}}}}},"responses":{"201":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"cv":{"$ref":"#/components/schemas/Cv"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}":{"get":{"summary":"Lire un CV","tags":["CV"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"cv":{"$ref":"#/components/schemas/Cv"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"summary":"Modifier un CV avec révision optimiste","tags":["CV"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["baseRevision"],"additionalProperties":false,"properties":{"baseRevision":{"type":"integer","minimum":1},"title":{"type":"string"},"data":{"type":"object","additionalProperties":true,"description":"Document CV structuré décrit par GET /v1/schema."},"sourceData":{"type":["object","null"],"additionalProperties":true}}}}}},"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","properties":{"cv":{"$ref":"#/components/schemas/Cv"}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}},"delete":{"summary":"Supprimer un CV et ses objets","tags":["CV"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"baseRevision","in":"query","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}/operations":{"patch":{"summary":"Appliquer des opérations atomiques","tags":["CV"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}/layout":{"get":{"summary":"Lire le layout résolu","tags":["CV"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}/readiness":{"get":{"summary":"Diagnostiquer la complétude","tags":["CV"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}/pagination":{"get":{"summary":"Mesurer la pagination exacte","tags":["CV"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}/preview.svg":{"get":{"summary":"Prévisualiser la première page en SVG","tags":["CV"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"image/svg+xml":{"schema":{"type":"string"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}/photo":{"get":{"summary":"Obtenir l’URL signée de la photo","tags":["Photo"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"summary":"Téléverser une photo","tags":["Photo"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}},"delete":{"summary":"Supprimer la photo","tags":["Photo"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}/pdf":{"get":{"summary":"Obtenir le dernier PDF signé","tags":["Rendu persistant"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"summary":"Produire et stocker le PDF","tags":["Rendu persistant"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"watermark":{"oneOf":[{"type":"boolean"},{"type":"object","additionalProperties":false,"properties":{"text":{"type":"string","maxLength":140}}}]}}}}}},"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}/svg":{"post":{"summary":"Produire le SVG multipage","tags":["Rendu persistant"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"image/svg+xml":{"schema":{"type":"string"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}/png":{"post":{"summary":"Produire les pages PNG","tags":["Rendu persistant"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}/letters":{"get":{"summary":"Lister les lettres","tags":["Lettre"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}},"post":{"summary":"Créer ou dupliquer une lettre","tags":["Lettre"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":8,"maxLength":190,"pattern":"^[A-Za-z0-9_-]+$","description":"Identifiant client facultatif. Un rejeu sous le même CV renvoie la lettre existante."},"label":{"type":["string","null"]},"target":{"type":["object","null"]},"copyFromLetterId":{"type":"string"}}}}}},"responses":{"201":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}/letters/{letterId}":{"get":{"summary":"Lire une lettre","tags":["Lettre"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"letterId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}},"patch":{"summary":"Modifier une lettre avec baseRevision","tags":["Lettre"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"letterId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["baseRevision"],"properties":{"baseRevision":{"type":"integer","minimum":1},"blocks":{"type":"array","items":{"type":"object"}},"blockUpdates":{"type":"object","additionalProperties":{"type":"string"}},"design":{"type":"object"},"label":{"type":["string","null"]},"target":{"type":["object","null"]},"sourceHash":{"type":["string","null"],"description":"Empreinte renvoyée par GET pour un contenu généré depuis cette source ; null marque explicitement un contenu importé comme périmé."},"model":{"type":"string","maxLength":200}}}}}},"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}},"delete":{"summary":"Supprimer une lettre","tags":["Lettre"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"letterId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/cvs/{id}/letters/{letterId}/pdf":{"post":{"summary":"Produire le PDF d’une lettre","tags":["Lettre"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"letterId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/renders/readiness":{"post":{"summary":"Diagnostiquer un document sans le stocker","tags":["Rendu stateless"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"additionalProperties":false,"properties":{"data":{"type":"object","additionalProperties":true,"description":"Document CV structuré décrit par GET /v1/schema."},"photo":{"type":"object","required":["mimeType","base64"],"additionalProperties":false,"properties":{"mimeType":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/gif"]},"base64":{"type":"string","contentEncoding":"base64"}}},"watermark":{"oneOf":[{"type":"boolean"},{"type":"object","additionalProperties":false,"properties":{"text":{"type":"string","maxLength":140}}}]}}}}}},"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/renders/pagination":{"post":{"summary":"Paginer un document sans le stocker","tags":["Rendu stateless"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"additionalProperties":false,"properties":{"data":{"type":"object","additionalProperties":true,"description":"Document CV structuré décrit par GET /v1/schema."},"photo":{"type":"object","required":["mimeType","base64"],"additionalProperties":false,"properties":{"mimeType":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/gif"]},"base64":{"type":"string","contentEncoding":"base64"}}},"watermark":{"oneOf":[{"type":"boolean"},{"type":"object","additionalProperties":false,"properties":{"text":{"type":"string","maxLength":140}}}]}}}}}},"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/renders/pdf":{"post":{"summary":"Produire un PDF sans le stocker","tags":["Rendu stateless"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"additionalProperties":false,"properties":{"data":{"type":"object","additionalProperties":true,"description":"Document CV structuré décrit par GET /v1/schema."},"photo":{"type":"object","required":["mimeType","base64"],"additionalProperties":false,"properties":{"mimeType":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/gif"]},"base64":{"type":"string","contentEncoding":"base64"}}},"watermark":{"oneOf":[{"type":"boolean"},{"type":"object","additionalProperties":false,"properties":{"text":{"type":"string","maxLength":140}}}]}}}}}},"responses":{"200":{"description":"Succès","content":{"application/pdf":{"schema":{"type":"string"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/renders/svg":{"post":{"summary":"Produire un SVG sans le stocker","tags":["Rendu stateless"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"additionalProperties":false,"properties":{"data":{"type":"object","additionalProperties":true,"description":"Document CV structuré décrit par GET /v1/schema."},"photo":{"type":"object","required":["mimeType","base64"],"additionalProperties":false,"properties":{"mimeType":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/gif"]},"base64":{"type":"string","contentEncoding":"base64"}}},"watermark":{"oneOf":[{"type":"boolean"},{"type":"object","additionalProperties":false,"properties":{"text":{"type":"string","maxLength":140}}}]}}}}}},"responses":{"200":{"description":"Succès","content":{"image/svg+xml":{"schema":{"type":"string"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/renders/png":{"post":{"summary":"Produire des PNG sans les stocker","tags":["Rendu stateless"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["data"],"additionalProperties":false,"properties":{"data":{"type":"object","additionalProperties":true,"description":"Document CV structuré décrit par GET /v1/schema."},"photo":{"type":"object","required":["mimeType","base64"],"additionalProperties":false,"properties":{"mimeType":{"type":"string","enum":["image/jpeg","image/png","image/webp","image/gif"]},"base64":{"type":"string","contentEncoding":"base64"}}},"watermark":{"oneOf":[{"type":"boolean"},{"type":"object","additionalProperties":false,"properties":{"text":{"type":"string","maxLength":140}}}]}}}}}},"responses":{"200":{"description":"Succès","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"ebl_live_*"},"appId":{"type":"apiKey","in":"header","name":"X-Ebolem-App-Id"}},"schemas":{"CvSummary":{"type":"object","required":["id","ownerRef","revision","createdAt","updatedAt"],"properties":{"id":{"type":"string"},"ownerRef":{"type":["string","null"]},"title":{"type":["string","null"]},"revision":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"Cv":{"allOf":[{"$ref":"#/components/schemas/CvSummary"},{"type":"object","required":["data"],"properties":{"data":{"type":"object","additionalProperties":true,"description":"Document CV structuré décrit par GET /v1/schema."},"sourceData":{"type":["object","null"],"additionalProperties":true},"photoKey":{"type":["string","null"]}}}]},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"responses":{"BadRequest":{"description":"Requête invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"App ID ou token invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Ressource introuvable dans l’application","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Conflict":{"description":"Conflit de révision","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"Limite de débit atteinte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}