Developers & Agents
Public API
Unauthenticated JSON endpoints for reading published site content and submitting a project inquiry. All bilingual fields are exposed as *Ar/*En pairs.
Discovery
- Machine-readable catalog (RFC 9727): /.well-known/api-catalog
- Agent skill definition: /.well-known/agent-skills/index.json
Endpoints
| GET | /api/settings | Company name, tagline, phone, email, WhatsApp, address |
| GET | /api/stats | Headline stats (years active, projects, clients, engineers) |
| GET | /api/services | Services offered |
| GET | /api/sectors | Sectors served |
| GET | /api/projects | Published projects. Query: page, limit, category, featured |
| GET | /api/projects/{slug} | Project detail: gallery, scope, challenge/solution, results, related |
| GET | /api/posts | Published blog posts. Query: page, limit, category, search, featured |
| GET | /api/posts/{slug} | Blog post detail with prev/next/related |
| GET | /api/reviews | Published client testimonials |
| GET | /api/health | Service status |
| POST | /api/contact | Submit a project inquiry |
Submitting a project inquiry
POST /api/contact with a JSON body:
{
"name": "string, required",
"phone": "string, required",
"email": "string, required, valid email",
"service": "string, required — one of the titles from GET /api/services",
"message": "string, required, minimum 10 characters",
"locale": "ar" | "en",
"website": ""
}websiteis a honeypot spam field — always send it empty.- This endpoint is rate-limited; a
429response means retry later.
Agent-friendly rendering
Send Accept: text/markdown on any of these pages to receive a compact markdown rendering instead of HTML: /, /works, /projects/{slug}, /blog, /blog/{slug}, /docs/api.