Integrations & API
A server-to-server REST API for everything Seerati does with CVs — create, edit, switch templates, and export pixel-perfect Arabic & English PDFs. Plug it into your HR system, job board, or internal tools.
https://seerati.g4t.io/api/v1
Authentication
Every request is authenticated with an API key sent in the X-API-Key header.
Create keys from the "API access" section of your profile —
each key is shown once, then stored only as a hash. Requests act as the account that owns the key, so plans, limits and template access apply exactly as on the web.
X-API-Key: sk_xxxxxxxxxxxxxxxx
Accept: application/json
Accept-Language: ar # or "en" — localizes messages
401.
Account
Inspect the account behind the key — plan, subscription and current usage. Useful for showing remaining quota in your own dashboard before creating CVs or downloading files.
/api/v1/me
{
"data": {
"id": 7, "name": "Acme HR", "email": "hr@acme.example",
"plan": { "key": "pro", "name": "Pro", "cv_limit": null,
"download_limit": null, "premium_templates": true, "watermark": false },
"subscription": { "status": "active", "ends_at": "2026-08-30T00:00:00+03:00" },
"usage": { "cvs": 12, "downloads_this_month": 31 },
"api_key": { "name": "HR system production", "prefix": "sk_AbCdEf1…" }
}
}
Templates
The templates your account can use — platform templates plus your company's own.
available is false for premium templates on a free plan,
and every template has a live preview_url.
/api/v1/templates
/api/v1/templates/{id}
{
"id": 1, "slug": "aurora", "name": "Aurora",
"description": "A vivid modern template with a bold color header.",
"category": "professional", "layout": "modern",
"is_premium": false, "is_company_template": false, "available": true,
"preview_url": "https://seerati.g4t.io/templates/1/demo"
}
CVs
Full lifecycle for the account's CVs. CVs are addressed by their UUID, and every response includes
links (self, pdf, html, and a public no-auth share page).
/api/v1/cvs
List all CVs, newest first.
/api/v1/cvs
Create a CV. Honors the plan's CV limit (403 when reached).
Body parameters — create
| Param | Type | Description |
|---|---|---|
title | string | Internal name, max 255 chars. |
locale | string | ar or en — sets direction & date formatting. |
template_id | int | A template id from /templates. |
/api/v1/cvs/{uuid}
The full document — personal info, settings, every section.
/api/v1/cvs/{uuid}
Partial update — send only the keys you want to change (see "The CV payload").
/api/v1/cvs/{uuid}/duplicate
Deep copy with every section row.
/api/v1/cvs/{uuid}/template
Switch template ({"template_id": …}); visual overrides reset so the new design shows.
/api/v1/cvs/{uuid}/photo
Multipart upload, field "photo" (image, ≤ 4 MB).
/api/v1/cvs/{uuid}/photo
/api/v1/cvs/{uuid}
export API_KEY="sk_xxxxxxxxxxxxxxxx"
# Create
CV=$(curl -s https://seerati.g4t.io/api/v1/cvs \
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" -H "Accept: application/json" \
-d '{"title":"Backend CV","locale":"ar","template_id":1}' | jq -r .data.id)
# Fill a section
curl -s -X PUT https://seerati.g4t.io/api/v1/cvs/$CV \
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" -H "Accept: application/json" \
-d '{"sections":{"skills":[{"name":"Laravel","level":"expert"}]}}'
The CV payload
GET returns this shape and
PUT accepts it back — it is the exact
payload the web editor autosaves, so anything possible in the editor is possible via the API.
Section arrays are replaced wholesale per section. Month fields use
YYYY-MM; birth_date uses
YYYY-MM-DD.
{
"title": "Backend CV",
"locale": "ar",
"personal": { "full_name": "…", "job_title": "…", "summary": "…", "email": "…", "phone": "…",
"website": "…", "address": "…", "nationality": "…", "birth_date": "1995-04-02" },
"settings": { "primary_color": "#0f766e", "theme": "light", "font_family": "Cairo" },
"section_order": ["experience", "education", "skills"],
"hidden_sections": [],
"sections": {
"experience": [{ "company": "…", "position": "…", "location": "…", "description": "…",
"start_date": "2021-03", "end_date": null, "is_current": true }],
"education": [{ "institution": "…", "degree": "…", "field_of_study": "…", "gpa": "…" }],
"skills": [{ "name": "Figma", "level": "expert" }],
"languages": [{ "name": "العربية", "level": "native" }],
"certifications": [{ "name": "…", "issuer": "…", "url": "…", "issue_date": "2023-05" }],
"projects": [{ "name": "…", "description": "…", "url": "…" }],
"awards": [{ "title": "…", "issuer": "…", "description": "…", "date": "2024-01" }],
"volunteers": [{ "organization": "…", "role": "…", "description": "…" }],
"references": [{ "name": "…", "position": "…", "company": "…", "email": "…", "phone": "…" }],
"tasks": [{ "description": "…" }],
"expertise": [{ "description": "…" }]
},
"custom_sections": [{ "key": "custom-abc123", "title": "…", "content": "…" }]
}
PDF & HTML export
Rendered by a real browser engine — correct Arabic shaping, RTL layout and print-grade output. Downloads count toward the plan's monthly limit, and free-plan exports carry a watermark.
/api/v1/cvs/{uuid}/pdf
Returns the PDF binary (Content-Type: application/pdf).
/api/v1/cvs/{uuid}/html
Self-contained HTML document of the CV.
curl -s -L https://seerati.g4t.io/api/v1/cvs/$CV/pdf -H "X-API-Key: $API_KEY" -o cv.pdf
Plans
The public plan catalogue — the only endpoint that needs no key. Upgrades happen on the website.
/api/v1/plans
Errors & limits
Success responses wrap results in { "data": … };
errors return { "message": …, "errors": { field: [ … ] } }.
| Status | Meaning |
|---|---|
| 401 | Missing, invalid or revoked X-API-Key. |
| 403 | Not your resource, or a plan limit — the message explains which. |
| 404 | Unknown UUID / id. |
| 422 | Validation failed — see errors. |
| 429 | Rate limited — honor Retry-After. 60 req/min per account; exports 10/min. |
Send Accept-Language: ar or
en to localize messages.
Cache template and plan lists where you can — they rarely change.