{"openapi":"3.0.3","info":{"title":"Seerati API","version":"1.0.0","description":"Server-to-server REST API for building, editing and exporting CVs with full Arabic RTL support. Authenticate with an API key (created from your profile page) sent in the `X-API-Key` header. Click **Authorize** and paste your key to try the endpoints live."},"servers":[{"url":"https:\/\/seerati.g4t.io"}],"security":[{"ApiKeyAuth":[]}],"tags":[{"name":"Account"},{"name":"Plans"},{"name":"Templates"},{"name":"CVs"},{"name":"Export"}],"paths":{"\/api\/v1\/plans":{"get":{"tags":["Plans"],"summary":"List subscription plans (public)","security":[],"responses":{"200":{"description":"Plan list","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/Plan"}}}}}}}}}},"\/api\/v1\/me":{"get":{"tags":["Account"],"summary":"The account behind the API key","responses":{"200":{"description":"Account, plan, subscription and usage","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/Me"}}}}}},"401":{"description":"Missing or invalid API key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/api\/v1\/templates":{"get":{"tags":["Templates"],"summary":"Templates available to the account","responses":{"200":{"description":"Template list","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/Template"}}}}}}},"401":{"description":"Missing or invalid API key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/api\/v1\/templates\/{template}":{"get":{"tags":["Templates"],"summary":"Single template","parameters":[{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Template","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/Template"}}}}}},"404":{"description":"Unknown or unavailable template","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/api\/v1\/cvs":{"get":{"tags":["CVs"],"summary":"List CVs","responses":{"200":{"description":"CV summaries, newest first","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/CvSummary"}}}}}}},"401":{"description":"Missing or invalid API key","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}},"post":{"tags":["CVs"],"summary":"Create a CV","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["title","locale","template_id"],"properties":{"title":{"type":"string","maxLength":255,"example":"Backend CV"},"locale":{"type":"string","enum":["ar","en"],"example":"ar"},"template_id":{"type":"integer","example":1}}}}}},"responses":{"201":{"description":"The created CV (full payload)","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/CvDetail"}}}}}},"403":{"description":"Plan CV limit reached, or template not available","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/api\/v1\/cvs\/{cv}":{"get":{"tags":["CVs"],"summary":"Full CV payload","parameters":[{"name":"cv","in":"path","required":true,"description":"The CV UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The document \u2014 personal info, settings, every section","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/CvDetail"}}}}}},"403":{"description":"Not your CV","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Unknown UUID","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}},"put":{"tags":["CVs"],"summary":"Update a CV (partial \u2014 send only what changes)","parameters":[{"name":"cv","in":"path","required":true,"description":"The CV UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CvPayload"}}}},"responses":{"200":{"description":"The fresh payload after saving","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/CvDetail"},"saved_at":{"type":"string","format":"date-time"}}}}}},"403":{"description":"Not your CV","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Validation failed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}},"delete":{"tags":["CVs"],"summary":"Delete a CV","parameters":[{"name":"cv","in":"path","required":true,"description":"The CV UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Deleted","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"deleted":{"type":"boolean"}}}}}}}},"403":{"description":"Not your CV","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/api\/v1\/cvs\/{cv}\/duplicate":{"post":{"tags":["CVs"],"summary":"Deep-copy a CV","parameters":[{"name":"cv","in":"path","required":true,"description":"The CV UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"201":{"description":"The copy (full payload)","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/CvDetail"}}}}}},"403":{"description":"Plan CV limit reached","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/api\/v1\/cvs\/{cv}\/template":{"post":{"tags":["CVs"],"summary":"Switch template (visual overrides reset)","parameters":[{"name":"cv","in":"path","required":true,"description":"The CV UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["template_id"],"properties":{"template_id":{"type":"integer","example":2}}}}}},"responses":{"200":{"description":"The fresh payload","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#\/components\/schemas\/CvDetail"}}}}}},"403":{"description":"Template not available on your plan","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/api\/v1\/cvs\/{cv}\/photo":{"post":{"tags":["CVs"],"summary":"Upload profile photo","parameters":[{"name":"cv","in":"path","required":true,"description":"The CV UUID","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"multipart\/form-data":{"schema":{"type":"object","required":["photo"],"properties":{"photo":{"type":"string","format":"binary","description":"Image, max 4 MB"}}}}}},"responses":{"200":{"description":"Uploaded","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"photo_url":{"type":"string","nullable":true}}}}}}}},"422":{"description":"Not an image \/ too large","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}},"delete":{"tags":["CVs"],"summary":"Remove profile photo","parameters":[{"name":"cv","in":"path","required":true,"description":"The CV UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Removed","content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"photo_url":{"type":"string","nullable":true}}}}}}}}}}},"\/api\/v1\/cvs\/{cv}\/pdf":{"get":{"tags":["Export"],"summary":"Download the rendered PDF","description":"Counts toward the plan's monthly download limit; free-plan exports carry a watermark. Rate limited to 10\/min.","parameters":[{"name":"cv","in":"path","required":true,"description":"The CV UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"PDF binary","content":{"application\/pdf":{"schema":{"type":"string","format":"binary"}}}},"403":{"description":"Monthly download limit reached","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/api\/v1\/cvs\/{cv}\/html":{"get":{"tags":["Export"],"summary":"Self-contained HTML document","parameters":[{"name":"cv","in":"path","required":true,"description":"The CV UUID","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"HTML document","content":{"text\/html":{"schema":{"type":"string"}}}},"403":{"description":"Monthly download limit reached","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Create a key from your profile page (\"API access\"). Server-to-server only."}},"schemas":{"Error":{"type":"object","properties":{"message":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"nullable":true}}},"Plan":{"type":"object","properties":{"key":{"type":"string","example":"pro"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"price":{"type":"number","format":"float"},"currency":{"type":"string","example":"USD"},"interval":{"type":"string","example":"month"},"cv_limit":{"type":"integer","nullable":true,"description":"null = unlimited"},"download_limit":{"type":"integer","nullable":true},"premium_templates":{"type":"boolean"},"watermark":{"type":"boolean"}}},"Me":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string"},"job_title":{"type":"string","nullable":true},"locale":{"type":"string"},"email_verified":{"type":"boolean"},"plan":{"$ref":"#\/components\/schemas\/Plan"},"subscription":{"type":"object","nullable":true,"properties":{"status":{"type":"string"},"ends_at":{"type":"string","format":"date-time","nullable":true}}},"usage":{"type":"object","properties":{"cvs":{"type":"integer"},"downloads_this_month":{"type":"integer"}}},"api_key":{"type":"object","properties":{"name":{"type":"string"},"prefix":{"type":"string","example":"sk_AbCdEf1\u2026"}}}}},"Template":{"type":"object","properties":{"id":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","nullable":true},"category":{"type":"string"},"layout":{"type":"string"},"is_premium":{"type":"boolean"},"is_company_template":{"type":"boolean"},"available":{"type":"boolean"},"preview_url":{"type":"string"}}},"CvSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"locale":{"type":"string","enum":["ar","en"]},"template":{"type":"object","nullable":true,"properties":{"id":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"}}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"links":{"$ref":"#\/components\/schemas\/CvLinks"}}},"CvLinks":{"type":"object","properties":{"self":{"type":"string"},"pdf":{"type":"string"},"html":{"type":"string"},"share":{"type":"string","description":"Public no-auth web page for this CV"}}},"CvPayload":{"type":"object","description":"The editor payload. All keys optional on update \u2014 send only what changes. Month fields use YYYY-MM.","properties":{"title":{"type":"string"},"locale":{"type":"string","enum":["ar","en"]},"personal":{"type":"object","properties":{"full_name":{"type":"string","nullable":true},"job_title":{"type":"string","nullable":true},"summary":{"type":"string","nullable":true},"email":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true},"website":{"type":"string","nullable":true},"address":{"type":"string","nullable":true},"nationality":{"type":"string","nullable":true},"birth_date":{"type":"string","format":"date","nullable":true}}},"settings":{"type":"object","description":"primary_color, secondary_color, accent_color, theme, font_family, font sizes, spacing\u2026"},"section_order":{"type":"array","items":{"type":"string"}},"hidden_sections":{"type":"array","items":{"type":"string"}},"sections":{"type":"object","properties":{"experience":{"type":"array","items":{"type":"object","properties":{"company":{"type":"string"},"position":{"type":"string"},"location":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"start_date":{"type":"string","example":"2021-03","nullable":true},"end_date":{"type":"string","example":"2023-06","nullable":true},"is_current":{"type":"boolean"},"year_only":{"type":"boolean","description":"Dates carry a year only \u2014 send \"2019\" instead of \"2019-05\"."}}}},"education":{"type":"array","items":{"type":"object","properties":{"institution":{"type":"string"},"degree":{"type":"string"},"field_of_study":{"type":"string","nullable":true},"gpa":{"type":"string","nullable":true},"start_date":{"type":"string","nullable":true},"end_date":{"type":"string","nullable":true},"is_current":{"type":"boolean"},"year_only":{"type":"boolean","description":"Dates carry a year only \u2014 send \"2019\" instead of \"2019-05\"."}}}},"skills":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","example":"Laravel"},"level":{"type":"string","example":"expert"}}}},"languages":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"level":{"type":"string"}}}},"certifications":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"issuer":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"issue_date":{"type":"string","example":"2023-05","nullable":true},"year_only":{"type":"boolean","description":"Dates carry a year only \u2014 send \"2019\" instead of \"2019-05\"."}}}},"projects":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"start_date":{"type":"string","nullable":true},"end_date":{"type":"string","nullable":true},"year_only":{"type":"boolean","description":"Dates carry a year only \u2014 send \"2019\" instead of \"2019-05\"."}}}},"awards":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"issuer":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"date":{"type":"string","example":"2024-01","nullable":true},"year_only":{"type":"boolean","description":"Dates carry a year only \u2014 send \"2019\" instead of \"2019-05\"."}}}},"volunteers":{"type":"array","items":{"type":"object","properties":{"organization":{"type":"string"},"role":{"type":"string"},"description":{"type":"string","nullable":true},"start_date":{"type":"string","nullable":true},"end_date":{"type":"string","nullable":true},"is_current":{"type":"boolean"},"year_only":{"type":"boolean","description":"Dates carry a year only \u2014 send \"2019\" instead of \"2019-05\"."}}}},"references":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"position":{"type":"string","nullable":true},"company":{"type":"string","nullable":true},"email":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true}}}},"tasks":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"}}}},"expertise":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"}}}}}},"custom_sections":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^custom-[a-z0-9]{1,30}$","example":"custom-abc123"},"title":{"type":"string"},"content":{"type":"string"}}}}}},"CvDetail":{"allOf":[{"$ref":"#\/components\/schemas\/CvPayload"},{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"photo_url":{"type":"string","nullable":true},"template_defaults":{"type":"object"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"links":{"$ref":"#\/components\/schemas\/CvLinks"}}}]}}}}