Developer guide

Endpoint reference

Every public endpoint with parameters.

Base URL: https://cms.af/api/public/v1. All responses are JSON with CORS enabled for any origin.

Method Path What it returns
GET /{domain}/{lang}/settings Site name, logo, contact details, social links and SEO for one language.
GET /{domain}/{lang}/posts Published blog posts, newest first.
GET /{domain}/{lang}/posts/{slug} One published post with full body, category, tags and SEO.
GET /{domain}/{lang}/taxonomies All blog categories and tags.
GET /{domain}/{lang}/about The About page content.
GET /{domain}/{lang}/contacts Public contact information (phones, emails, addresses).
GET /{domain}/{lang}/projects Published projects.
GET /{domain}/{lang}/projects/{slug} One published project.
GET /{domain}/{lang}/reports Published reports with file info.
GET /{domain}/{lang}/reports/{slug} One published report.
GET /{domain}/{lang}/reports/{slug}/download Redirects to a short-lived download link for the report file.
GET /{domain}/{lang}/services Published services with price info.
GET /{domain}/{lang}/services/{slug} One service with full description and related projects.
GET /{domain}/{lang}/team Published team members (name, role, department, photo, social links).
GET /{domain}/{lang}/pages Published custom pages (FAQ, Privacy, Terms…).
GET /{domain}/{lang}/pages/{slug} One page with content, template and FAQ items.
GET /{domain}/{lang}/menus Header and footer menus with translated labels, plus footer settings.
GET /{domain}/{lang}/footer Footer columns, description, copyright, contact and social links.
GET /{domain}/{lang}/jobs Open vacancies (closed jobs are hidden automatically).
GET /{domain}/{lang}/jobs/{slug} One open vacancy.
POST /{domain}/jobs/{slug}/apply Apply for a job (multipart form: name, email, phone, cover_letter, cv file PDF/Word ≤5 MB).
GET /{domain}/{lang}/events Published events.
GET /{domain}/{lang}/events/{slug} One event.
GET /{domain}/{lang}/events/{slug}/ics Calendar file (.ics) for one event.
GET /{domain}/{lang}/gallery Published photo/video albums.
GET /{domain}/{lang}/gallery/{slug} One album with all photos and videos.
GET /{domain}/{lang}/testimonials Published client testimonials with ratings.
GET /{domain}/{lang}/partners Partner and client logos.
GET /{domain}/{lang}/tenders Open tenders and RFQs (closed ones hidden after the deadline).
GET /{domain}/{lang}/tenders/{slug} One tender with full details and document link.
GET /{domain}/{lang}/faqs Published FAQ items plus ready-made schema.org FAQPage markup.
GET /{domain}/{lang}/announcements Currently active announcements; filter=banner returns site banners only.
GET /{domain}/{lang}/announcements/{slug} One announcement with full text.
GET /{domain}/{lang}/locations Branch offices with address, hours, phone and coordinates.
GET /{domain}/{lang}/pricing Pricing packages; featured = highlighted package.
POST /{domain}/subscribe Add a newsletter subscriber (JSON body: email, name?, locale?).
POST /{domain}/contact Submit a contact-form message (JSON body).
GET /{domain}/verify Check a secret API key (server-side only).
GET /media/{path} Uploaded images (logos, covers). Cached forever.

Details

GET /{domain}/{lang}/settings

Site name, logo, contact details, social links and SEO for one language.

GET /{domain}/{lang}/posts

Published blog posts, newest first.

Query Description
page Page number, default 1
per_page 1–50, default 10
category Category slug
tag Tag slug
q Search text (max 100 chars)

GET /{domain}/{lang}/posts/{slug}

One published post with full body, category, tags and SEO.

GET /{domain}/{lang}/taxonomies

All blog categories and tags.

GET /{domain}/{lang}/about

The About page content.

GET /{domain}/{lang}/contacts

Public contact information (phones, emails, addresses).

GET /{domain}/{lang}/projects

Published projects.

Query Description
page Page number, default 1
per_page 1–50, default 12
status planned
q Search text (max 200 chars)

GET /{domain}/{lang}/projects/{slug}

One published project.

GET /{domain}/{lang}/reports

Published reports with file info.

Query Description
page Page number, default 1
per_page 1–50, default 12
q Search text (max 200 chars)

GET /{domain}/{lang}/reports/{slug}

One published report.

GET /{domain}/{lang}/reports/{slug}/download

Redirects to a short-lived download link for the report file.

GET /{domain}/{lang}/services

Published services with price info.

Query Description
page Page number, default 1
per_page 1–100, default 20
filter featured

GET /{domain}/{lang}/services/{slug}

One service with full description and related projects.

GET /{domain}/{lang}/team

Published team members (name, role, department, photo, social links).

Query Description
page Page number, default 1
per_page 1–100, default 20
filter featured

GET /{domain}/{lang}/pages

Published custom pages (FAQ, Privacy, Terms…).

GET /{domain}/{lang}/pages/{slug}

One page with content, template and FAQ items.

GET /{domain}/{lang}/menus

Header and footer menus with translated labels, plus footer settings.

Footer columns, description, copyright, contact and social links.

GET /{domain}/{lang}/jobs

Open vacancies (closed jobs are hidden automatically).

Query Description
page Page number, default 1
per_page 1–100, default 20
filter featured

GET /{domain}/{lang}/jobs/{slug}

One open vacancy.

POST /{domain}/jobs/{slug}/apply

Apply for a job (multipart form: name, email, phone, cover_letter, cv file PDF/Word ≤5 MB).

GET /{domain}/{lang}/events

Published events.

Query Description
page Page number, default 1
per_page 1–100, default 20
filter upcoming

GET /{domain}/{lang}/events/{slug}

One event.

GET /{domain}/{lang}/events/{slug}/ics

Calendar file (.ics) for one event.

Published photo/video albums.

Query Description
page Page number, default 1
per_page 1–100, default 20
filter featured

One album with all photos and videos.

GET /{domain}/{lang}/testimonials

Published client testimonials with ratings.

Query Description
page Page number, default 1
per_page 1–100, default 20
filter featured

GET /{domain}/{lang}/partners

Partner and client logos.

GET /{domain}/{lang}/tenders

Open tenders and RFQs (closed ones hidden after the deadline).

Query Description
page Page number, default 1
per_page 1–100, default 20
filter featured

GET /{domain}/{lang}/tenders/{slug}

One tender with full details and document link.

GET /{domain}/{lang}/faqs

Published FAQ items plus ready-made schema.org FAQPage markup.

Query Description
page Page number, default 1
per_page 1–100, default 20
filter featured

GET /{domain}/{lang}/announcements

Currently active announcements; filter=banner returns site banners only.

Query Description
page Page number, default 1
per_page 1–100, default 20
filter featured

GET /{domain}/{lang}/announcements/{slug}

One announcement with full text.

GET /{domain}/{lang}/locations

Branch offices with address, hours, phone and coordinates.

Query Description
page Page number, default 1
per_page 1–100, default 20
filter featured

GET /{domain}/{lang}/pricing

Pricing packages; featured = highlighted package.

Query Description
page Page number, default 1
per_page 1–100, default 20
filter featured

POST /{domain}/subscribe

Add a newsletter subscriber (JSON body: email, name?, locale?).

POST /{domain}/contact

Submit a contact-form message (JSON body).

GET /{domain}/verify

Check a secret API key (server-side only).

Header Description
x-api-key Your secret key

GET /media/{path}

Uploaded images (logos, covers). Cached forever.

Response shape

Open API → Playground in your dashboard to see the exact JSON each endpoint returns for your website.