DOCUMENTATION

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.

Base URL 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.

headers
X-API-Key: sk_xxxxxxxxxxxxxxxx
Accept: application/json
Accept-Language: ar   # or "en" — localizes messages
Server-to-server only. Keys must live in your backend's secrets — never in mobile apps, desktop apps or browser code, where anyone can extract them. There is no registration or login over the API, and CORS is disabled so browsers cannot call it cross-origin. A missing, invalid or revoked key returns 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.

GET /api/v1/me
json — response
{
  "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.

GET /api/v1/templates
GET /api/v1/templates/{id}
json — response item
{
  "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).

GET /api/v1/cvs

List all CVs, newest first.

POST /api/v1/cvs

Create a CV. Honors the plan's CV limit (403 when reached).

Body parameters — create

Param Type Description
titlestringInternal name, max 255 chars.
localestringar or en — sets direction & date formatting.
template_idintA template id from /templates.
GET /api/v1/cvs/{uuid}

The full document — personal info, settings, every section.

PUT /api/v1/cvs/{uuid}

Partial update — send only the keys you want to change (see "The CV payload").

POST /api/v1/cvs/{uuid}/duplicate

Deep copy with every section row.

POST /api/v1/cvs/{uuid}/template

Switch template ({"template_id": …}); visual overrides reset so the new design shows.

POST /api/v1/cvs/{uuid}/photo

Multipart upload, field "photo" (image, ≤ 4 MB).

DELETE /api/v1/cvs/{uuid}/photo
DELETE /api/v1/cvs/{uuid}
curl — create & fill
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.

json — payload
{
  "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.

GET /api/v1/cvs/{uuid}/pdf

Returns the PDF binary (Content-Type: application/pdf).

GET /api/v1/cvs/{uuid}/html

Self-contained HTML document of the CV.

curl
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.

GET /api/v1/plans

Errors & limits

Success responses wrap results in { "data": … }; errors return { "message": …, "errors": { field: [ … ] } }.

Status Meaning
401Missing, invalid or revoked X-API-Key.
403Not your resource, or a plan limit — the message explains which.
404Unknown UUID / id.
422Validation failed — see errors.
429Rate 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.