{"openapi":"3.1.0","info":{"title":"DigitalManager Public Content API","version":"1.0.0","description":"Read-only published marketing content, localized GCC pages, blog/testimonials, SEO metadata, and public demo/contact submission.\n\n**Stable routes:** `/api/public/v1/*` (documented below with `V1` operationIds).\n\nStable public JSON routes live under `/api/public/v1/`.\nLegacy unversioned paths (`/api/public/*`, `/api/homepage`, `/api/site-settings`, `/api/page/{slug}`, `/api/software-detail/{kind}/{slug}`) remain available as backward-compatible aliases.\nDeprecated aliases respond with `Deprecation: true`, `Sunset`, and a `Link` header pointing to /developers#versioning.\nBreaking changes ship only in a new major prefix (for example `/api/public/v2/`). v1 aliases are supported until the published Sunset date.\nAdmin CMS routes are private and are not versioned on this surface.\n\nGET rate limit: 120 requests per IP per 60s.\nPOST /api/public/v1/leads rate limit: 12 submissions per IP per 10 minutes.\n\n**Not included:** admin CMS mutations, authentication, lead/customer/financial records, ERP tenant data, API keys, MCP, or webhooks.\n\nHuman overview: [/developers](/developers). Machine-readable agent guide: [/llms.txt](/llms.txt).\n\nPricing is not exposed as a dedicated pricing API. If a pricing CMS page is published, use `GET /api/public/v1/pages/{slug}`.","contact":{"name":"DigitalManager","url":"https://pk-test.digitalmanager.ae/contact","email":"info@digitalmanager.ae"}},"servers":[{"url":"https://pk-test.digitalmanager.ae","description":"Production website origin (canonical)"}],"tags":[{"name":"health","description":"Service availability"},{"name":"company","description":"Company and site settings"},{"name":"homepage","description":"Homepage CMS bundles"},{"name":"solutions","description":"ERP modules, industries, business models, FAQs via locale content"},{"name":"blog","description":"Published blog posts and categories"},{"name":"testimonials","description":"Published customer testimonials"},{"name":"locale","description":"GCC localized public content resolution"},{"name":"seo","description":"SEO metadata and discovery files"},{"name":"forms","description":"Public contact and demo submission"}],"components":{"schemas":{"PublicApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"HealthResponse":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean","example":true},"bootstrapReady":{"type":"boolean","example":true},"bootstrapError":{"type":"string","nullable":true},"dataDirReadable":{"type":"boolean","example":true},"dataDirCheckMs":{"type":"integer","example":12},"distAssets":{"type":"integer","example":42},"serveStatic":{"type":"boolean","example":true},"uptimeSec":{"type":"integer","example":3600},"time":{"type":"string","format":"date-time"},"cache":{"type":"object","properties":{"hits":{"type":"integer"},"misses":{"type":"integer"}}},"env":{"type":"object","properties":{"nodeEnv":{"type":"string"},"port":{"type":"integer"}}},"service":{"type":"string","example":"digitalmanager-cms-api"},"timestamp":{"type":"string","format":"date-time"}},"example":{"ok":true,"bootstrapReady":true,"dataDirReadable":true,"serveStatic":true,"uptimeSec":3600,"time":"2026-08-24T12:00:00.000Z"}},"LeadRequest":{"type":"object","required":["email"],"properties":{"name":{"type":"string","example":"Aisha Khan"},"email":{"type":"string","format":"email","example":"aisha@example.com"},"phone":{"type":"string","example":"+971501234567"},"company":{"type":"string","example":"Example Trading LLC"},"topic":{"type":"string","enum":["demo","pricing","support","other"],"example":"demo"},"message":{"type":"string","example":"We need ERP for 3 retail branches."},"sourcePage":{"type":"string","example":"/contact"},"source":{"type":"string","example":"Contact Page"},"productService":{"type":"string","example":"Inventory Management"},"countryCode":{"type":"string","example":"AE"},"localeCountry":{"type":"string","example":"ae"},"localeLang":{"type":"string","enum":["en","ar"],"example":"en"}}},"LeadResponse":{"type":"object","properties":{"ok":{"type":"boolean","example":true},"id":{"type":"string","example":"abc123xyz456"}},"example":{"ok":true,"id":"abc123xyz456"}},"SeoPageResponse":{"type":"object","properties":{"path":{"type":"string","example":"/erp"},"canonical":{"type":"string","format":"uri","example":"https://digitalmanager.ae/erp"},"noIndex":{"type":"boolean","example":false},"robots":{"type":"string","example":"index, follow"},"lang":{"type":"string","enum":["en","ar"],"example":"en"},"dir":{"type":"string","enum":["ltr","rtl"],"example":"ltr"},"title":{"type":"string"},"description":{"type":"string"},"alternates":{"type":"array","items":{"type":"object","properties":{"hreflang":{"type":"string"},"href":{"type":"string","format":"uri"}}}}}},"LocaleContentResponse":{"type":"object","required":["page"],"properties":{"page":{"$ref":"#/components/schemas/LocalePage"},"meta":{"$ref":"#/components/schemas/LocaleMeta"}}},"LocalePage":{"type":"object","required":["id","slug","title","heading"],"properties":{"id":{"type":"string"},"slug":{"type":"string"},"contentType":{"type":"string","example":"cityPage"},"globalIdentity":{"type":"string"},"template":{"type":"string","example":"cms-page"},"title":{"type":"string"},"heading":{"type":"string"},"shortDescription":{"type":"string"},"sections":{"type":"array","items":{"type":"object","required":["id","type"],"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["richText","faq","cta","featureGrid","bulletList","image","stats"]},"visible":{"type":"boolean","default":true},"heading":{"type":"string"},"body":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"question":{"type":"string"},"answer":{"type":"string"}}}}}}},"seo":{"$ref":"#/components/schemas/PageSeo"},"sortOrder":{"type":"integer"},"citySlug":{"type":"string","nullable":true},"_locale":{"$ref":"#/components/schemas/LocaleMeta"}}},"LocaleMeta":{"type":"object","properties":{"resolvedFrom":{"type":"string","enum":["global","country_default","locale_override","city_override"]},"inherited":{"type":"boolean"},"fallbackUsed":{"type":"boolean"},"cityFallback":{"type":"boolean"},"missing":{"type":"boolean"},"requestedCity":{"type":"string"}}},"PageSeo":{"type":"object","properties":{"title":{"$ref":"#/components/schemas/BilingualString"},"description":{"$ref":"#/components/schemas/BilingualString"},"keywords":{"$ref":"#/components/schemas/BilingualString"},"noIndex":{"type":"boolean"},"robotsIndex":{"type":"string","enum":["index","noindex"]},"robotsFollow":{"type":"string","enum":["follow","nofollow"]},"canonicalUrl":{"type":"string","format":"uri"}}},"PageSection":{"type":"object","required":["id","type"],"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["richText","faq","cta","featureGrid","bulletList","image","stats"]},"visible":{"type":"boolean","default":true},"heading":{"type":"string"},"body":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"question":{"type":"string"},"answer":{"type":"string"}}}}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer","minimum":1,"example":1},"pageSize":{"type":"integer","minimum":1,"maximum":24,"example":9},"total":{"type":"integer","minimum":0,"example":42},"totalPages":{"type":"integer","minimum":1,"example":5}}},"BilingualString":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true},"SiteSettingsBundle":{"type":"object","properties":{"header":{"type":"object","properties":{"navLinks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"href":{"type":"string"},"active":{"type":"boolean"},"sortOrder":{"type":"integer"}}}},"logoUrl":{"type":"string"}}},"seo":{"type":"object","properties":{"pageTitle":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true},"metaDescription":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true}}},"footer":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"}}}}}},"siteSettings":{"type":"object","properties":{"primaryEmail":{"type":"string","example":"info@digitalmanager.ae"},"phoneDisplay":{"type":"string","example":"+971 4 123 4567"},"officeAddress":{"$ref":"#/components/schemas/BilingualString"},"logoUrl":{"type":"string"},"facebookUrl":{"type":"string","format":"uri"},"linkedinUrl":{"type":"string","format":"uri"}}}}},"HomepageBundle":{"type":"object","properties":{"hero":{"type":"object","properties":{"title":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true},"sub":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true},"body":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true}}},"stats":{"type":"object","properties":{"title":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"value":{"type":"string"},"label":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true}}}}}},"modules":{"type":"object","properties":{"title":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true},"description":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true}}}}}},"industries":{"type":"object","properties":{"title":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true},"name":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true}}}}}},"about":{"type":"object","properties":{"title":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true},"paragraphs":{"type":"array","items":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true}}}},"navigation":{"type":"object","properties":{"headerLinks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"href":{"type":"string"},"active":{"type":"boolean"},"sortOrder":{"type":"integer"}}}},"footerColumns":{"type":"object","properties":{"links":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"href":{"type":"string"},"active":{"type":"boolean"},"sortOrder":{"type":"integer"}}}}}},"pages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"active":{"type":"boolean"}}}}}},"testimonials":{"type":"object","properties":{"section":{"type":"object","properties":{"enabled":{"type":"boolean"}}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"quote":{"type":"string"},"customerName":{"type":"string"}}}}}},"demoCta":{"type":"object","properties":{"enabled":{"type":"boolean"},"title":{"type":"object","properties":{"en":{"type":"string"},"ar":{"type":"string"}},"additionalProperties":true}}},"_locale":{"$ref":"#/components/schemas/LocaleMeta"}}},"NavigationResponse":{"type":"object","properties":{"headerLinks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"href":{"type":"string"},"active":{"type":"boolean"},"sortOrder":{"type":"integer"}}}},"footerColumns":{"type":"object","properties":{"links":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"href":{"type":"string"},"active":{"type":"boolean"},"sortOrder":{"type":"integer"}}}}}},"pages":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"}}}}}},"PublicPagesList":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"template":{"type":"string"},"published":{"type":"boolean"}}}}}},"PublicPageDetail":{"type":"object","required":["page"],"properties":{"page":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"heading":{"type":"string"},"shortDescription":{"type":"string"},"sections":{"type":"array","items":{"type":"object","required":["id","type"],"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["richText","faq","cta","featureGrid","bulletList","image","stats"]},"visible":{"type":"boolean","default":true},"heading":{"type":"string"},"body":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"question":{"type":"string"},"answer":{"type":"string"}}}}}}},"seo":{"$ref":"#/components/schemas/PageSeo"}}}}},"TestimonialsResponse":{"type":"object","required":["items"],"properties":{"schemaVersion":{"type":"integer"},"section":{"type":"object","properties":{"enabled":{"type":"boolean"},"eyebrow":{"type":"string"},"heading":{"type":"string"},"supportingText":{"type":"string"},"viewAllLabel":{"type":"string"},"viewAllUrl":{"type":"string"},"showViewAll":{"type":"boolean"}}},"page":{"type":"object","properties":{"enabled":{"type":"boolean"},"title":{"type":"string"},"intro":{"type":"string"},"seoTitle":{"type":"string"},"seoDescription":{"type":"string"}}},"items":{"type":"array","items":{"type":"object","required":["id","quote","customerName"],"properties":{"id":{"type":"string"},"quote":{"type":"string"},"customerName":{"type":"string"},"designation":{"type":"string"},"company":{"type":"string"},"image":{"type":"string"},"imageAlt":{"type":"string"},"industry":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"rating":{"type":"number","minimum":1,"maximum":5},"verified":{"type":"boolean"},"featuredOnHomepage":{"type":"boolean"}}}}}},"BlogCategory":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}}},"BlogPostsList":{"type":"object","required":["items","pagination"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"excerpt":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"categoryName":{"type":"string"},"categorySlug":{"type":"string"},"coverImage":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}}}},"pagination":{"$ref":"#/components/schemas/Pagination"},"section":{"type":"object","properties":{"enabled":{"type":"boolean"},"title":{"type":"string"}}}}},"BlogPostDetail":{"type":"object","required":["post"],"properties":{"post":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"excerpt":{"type":"string"},"body":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"text":{"type":"string"}}}},"publishedAt":{"type":"string","format":"date-time"},"coverImage":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}}},"related":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"excerpt":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"categoryName":{"type":"string"},"categorySlug":{"type":"string"},"coverImage":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}}}},"prev":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"excerpt":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"categoryName":{"type":"string"},"categorySlug":{"type":"string"},"coverImage":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}}},"next":{"type":"object","nullable":true,"properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"excerpt":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"categoryName":{"type":"string"},"categorySlug":{"type":"string"},"coverImage":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}}}}},"BlogHomepagePreview":{"type":"object","properties":{"enabled":{"type":"boolean"},"title":{"type":"string"},"featured":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"excerpt":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"categoryName":{"type":"string"},"categorySlug":{"type":"string"},"coverImage":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"excerpt":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"categoryName":{"type":"string"},"categorySlug":{"type":"string"},"coverImage":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}}}}}},"SoftwareDetail":{"type":"object","properties":{"kind":{"type":"string","enum":["module","industry"]},"slug":{"type":"string"},"title":{"type":"string"},"heading":{"type":"string"},"shortDescription":{"type":"string"},"sections":{"type":"array","items":{"type":"object","required":["id","type"],"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["richText","faq","cta","featureGrid","bulletList","image","stats"]},"visible":{"type":"boolean","default":true},"heading":{"type":"string"},"body":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"question":{"type":"string"},"answer":{"type":"string"}}}}}}},"seo":{"$ref":"#/components/schemas/PageSeo"}}},"CountriesList":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"]},"slug":{"type":"string","enum":["ae","sa","qa","om","kw","bh"]},"name":{"type":"string"},"currency":{"type":"string"},"enabled":{"type":"boolean"}}}}}},"CitiesList":{"type":"object","required":["cities"],"properties":{"cities":{"type":"array","items":{"type":"object","required":["slug","countryCode","name"],"properties":{"slug":{"type":"string","example":"dubai"},"countryCode":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"]},"name":{"$ref":"#/components/schemas/BilingualString"},"focus":{"$ref":"#/components/schemas/BilingualString"},"industries":{"type":"array","items":{"type":"string"}},"services":{"type":"array","items":{"type":"string"}}}}}}},"LocaleHint":{"type":"object","properties":{"countryCode":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"]},"source":{"type":"string","enum":["header","fallback"]}}},"LocaleRouting":{"type":"object","properties":{"redirect":{"type":"string","nullable":true,"example":"/qa/en"},"country":{"type":"string","enum":["ae","sa","qa","om","kw","bh"]},"lang":{"type":"string","enum":["en","ar"]}}},"OpenApiDocument":{"type":"object","required":["openapi","info","paths"],"properties":{"openapi":{"type":"string","example":"3.1.0"},"info":{"type":"object","required":["title","version"],"properties":{"title":{"type":"string"},"version":{"type":"string"},"description":{"type":"string"}}},"servers":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"}}}},"paths":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object","properties":{"operationId":{"type":"string"},"summary":{"type":"string"},"description":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"responses":{"type":"object","additionalProperties":{"type":"object","properties":{"description":{"type":"string"},"operationId":{"type":"string"}}}}}}}},"components":{"type":"object","properties":{"schemas":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string"},"properties":{"type":"object","additionalProperties":{"type":"object","properties":{"type":{"type":"string"}}}}}}}}}}}},"parameters":{"QueryCountry":{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},"QueryLang":{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}}},"paths":{"/api/health":{"get":{"summary":"Returns API process health for uptime checks.","description":"Returns API process health for uptime checks.\n\n**Deprecated alias.** Prefer `/api/public/v1/health`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getHealth","tags":["health"],"responses":{"200":{"description":"Service is running.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"503":{"description":"Storage or dependencies unavailable.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/site-settings":{"get":{"summary":"Published company/site settings: header, SEO defaults, footer, and contact details.","description":"Published company/site settings: header, SEO defaults, footer, and contact details.\n\n**Deprecated alias.** Prefer `/api/public/v1/site-settings`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getSiteSettings","tags":["company"],"responses":{"200":{"description":"Site settings bundle.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteSettingsBundle"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"503":{"description":"Published content temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/countries":{"get":{"summary":"Published GCC country list for locale selectors.","description":"Published GCC country list for locale selectors.\n\n**Deprecated alias.** Prefer `/api/public/v1/countries`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"listCountries","tags":["locale"],"parameters":[{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Enabled countries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountriesList"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/homepage":{"get":{"summary":"Locale-aware homepage CMS bundle (hero, modules, industries, stats, navigation).","description":"Locale-aware homepage CMS bundle (hero, modules, industries, stats, navigation).","operationId":"getHomepageBundle","tags":["homepage"],"parameters":[{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Homepage payload.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomepageBundle"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"503":{"description":"Published content temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/homepage":{"get":{"summary":"Alias of homepage bundle for UAE English legacy clients.","description":"Alias of homepage bundle for UAE English legacy clients.\n\n**Deprecated alias.** Prefer `/api/public/v1/homepage`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getPublicHomepage","tags":["homepage"],"responses":{"200":{"description":"Homepage payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomepageBundle"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/site":{"get":{"summary":"Full published site bundle (same shape as homepage).","description":"Full published site bundle (same shape as homepage).\n\n**Deprecated alias.** Prefer `/api/public/v1/site`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getPublicSite","tags":["homepage"],"responses":{"200":{"description":"Site bundle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomepageBundle"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/navigation":{"get":{"summary":"Published header/footer navigation links.","description":"Published header/footer navigation links.\n\n**Deprecated alias.** Prefer `/api/public/v1/navigation`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getNavigation","tags":["homepage"],"responses":{"200":{"description":"Navigation payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NavigationResponse"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/pages":{"get":{"summary":"List published CMS marketing pages (excludes admin routes).","description":"List published CMS marketing pages (excludes admin routes).\n\n**Deprecated alias.** Prefer `/api/public/v1/pages`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"listPublicPages","tags":["company"],"responses":{"200":{"description":"Published pages.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPagesList"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/pages/{slug}":{"get":{"summary":"Fetch one published CMS page by slug. Use for optional pricing or custom marketing pages when published.","description":"Fetch one published CMS page by slug. Use for optional pricing or custom marketing pages when published.\n\n**Deprecated alias.** Prefer `/api/public/v1/pages/{slug}`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getPublicPageBySlug","tags":["company"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","example":"pricing"},"description":"Published CMS page slug."}],"responses":{"200":{"description":"Page payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPageDetail"}}}},"404":{"description":"Page slug not found or not published.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/locale-content/{slug}":{"get":{"summary":"Localized registry page content. Supported slugs include: erp, solutions, business-models, faqs, contact, industries.","description":"Localized registry page content. Supported slugs include: erp, solutions, business-models, faqs, contact, industries.\n\n**Deprecated alias.** Prefer `/api/public/v1/locale-content/{slug}`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getLocaleContentBySlug","tags":["solutions"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","enum":["erp","solutions","business-models","faqs","contact","industries"],"example":"erp"}},{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Localized page view.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocaleContentResponse"}}}},"404":{"description":"Not published for locale or missing translation.","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},{"type":"object","properties":{"slug":{"type":"string"},"countryCode":{"type":"string","example":"QA"},"lang":{"type":"string","example":"en"},"meta":{"$ref":"#/components/schemas/LocaleMeta"},"fallback":{"type":"object","required":["countryCode","lang","href"],"properties":{"countryCode":{"type":"string"},"lang":{"type":"string","enum":["en","ar"]},"href":{"type":"string","format":"uri"}}}}}]}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/locale-content/software/{kind}/{slug}":{"get":{"summary":"Localized ERP module or industry software detail page.","description":"Localized ERP module or industry software detail page.\n\n**Deprecated alias.** Prefer `/api/public/v1/locale-content/software/{kind}/{slug}`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getLocaleSoftwareContent","tags":["solutions"],"parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","enum":["module","industry"],"example":"module"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","example":"inventory-management-software"}},{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Software detail page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocaleContentResponse"}}}},"400":{"description":"Invalid kind or slug.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"404":{"description":"Software page not published for locale.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/software-detail/{kind}/{slug}":{"get":{"summary":"UAE English software detail JSON used by the marketing site (legacy public read endpoint).","description":"UAE English software detail JSON used by the marketing site (legacy public read endpoint).","operationId":"getSoftwareDetail","tags":["solutions"],"parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","enum":["module","industry"]}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Software detail document.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SoftwareDetail"}}}},"404":{"description":"Software detail not found.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/testimonials":{"get":{"summary":"Published testimonials section and items.","description":"Published testimonials section and items.\n\n**Deprecated alias.** Prefer `/api/public/v1/testimonials`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"listTestimonials","tags":["testimonials"],"parameters":[{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Testimonials payload.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestimonialsResponse"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/blog/categories":{"get":{"summary":"Published blog categories.","description":"Published blog categories.\n\n**Deprecated alias.** Prefer `/api/public/v1/blog/categories`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"listBlogCategories","tags":["blog"],"parameters":[{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Categories.","content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BlogCategory"}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/blog/posts":{"get":{"summary":"Paginated published blog posts with optional search and category filter.","description":"Paginated published blog posts with optional search and category filter.\n\n**Deprecated alias.** Prefer `/api/public/v1/blog/posts`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"listBlogPosts","tags":["blog"],"parameters":[{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"},{"name":"category","in":"query","schema":{"type":"string"},"description":"Category slug or id."},{"name":"search","in":"query","schema":{"type":"string"},"description":"Case-insensitive title/excerpt search."},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","minimum":1,"maximum":24,"default":9}}],"responses":{"200":{"description":"Blog listing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostsList"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/blog/posts/{slug}":{"get":{"summary":"One published blog post with related posts.","description":"One published blog post with related posts.\n\n**Deprecated alias.** Prefer `/api/public/v1/blog/posts/{slug}`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getBlogPostBySlug","tags":["blog"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","example":"retail-pos-uae"}},{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Blog post detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostDetail"}}}},"404":{"description":"Blog post not found.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/blog/homepage":{"get":{"summary":"Homepage blog preview (featured + items).","description":"Homepage blog preview (featured + items).\n\n**Deprecated alias.** Prefer `/api/public/v1/blog/homepage`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getBlogHomepagePreview","tags":["blog"],"parameters":[{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":6,"default":3}}],"responses":{"200":{"description":"Homepage blog section.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogHomepagePreview"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/locale-hint":{"get":{"summary":"Non-precise country hint from trusted proxy headers (never stores IP). Used for UX only.","description":"Non-precise country hint from trusted proxy headers (never stores IP). Used for UX only.\n\n**Deprecated alias.** Prefer `/api/public/v1/locale-hint`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getLocaleHint","tags":["locale"],"responses":{"200":{"description":"Country hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocaleHint"}}}}},"deprecated":true}},"/api/public/locale-routing":{"get":{"summary":"Public locale routing decision for `/` (same logic as geo redirect; informational).","description":"Public locale routing decision for `/` (same logic as geo redirect; informational).\n\n**Deprecated alias.** Prefer `/api/public/v1/locale-routing`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getLocaleRouting","tags":["locale"],"responses":{"200":{"description":"Routing decision.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocaleRouting"}}}}},"deprecated":true}},"/api/public/seo-page":{"get":{"summary":"Resolve canonical, robots, hreflang, and title for a public path.","description":"Resolve canonical, robots, hreflang, and title for a public path.\n\n**Deprecated alias.** Prefer `/api/public/v1/seo-page`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getSeoPage","tags":["seo"],"parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","example":"/erp"},"description":"Public site path including locale prefix when applicable."}],"responses":{"200":{"description":"SEO metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeoPageResponse"}}}},"429":{"description":"Rate limit exceeded.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}},"Retry-After":{"schema":{"type":"integer","example":60}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"},"example":{"error":{"code":"RATE_LIMITED","message":"Too many public API requests. Please wait before retrying.","resolution":"Wait and retry after Retry-After seconds."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"503":{"description":"SEO resolver unavailable.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/cities":{"get":{"summary":"Published city registry for UAE and GCC locale pages.","description":"Published city registry for UAE and GCC locale pages.\n\n**Deprecated alias.** Prefer `/api/public/v1/cities`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"listCities","tags":["locale"],"parameters":[{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"City list.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CitiesList"}}}},"429":{"description":"Rate limit exceeded.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}},"Retry-After":{"schema":{"type":"integer","example":60}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"},"example":{"error":{"code":"RATE_LIMITED","message":"Too many public API requests. Please wait before retrying.","resolution":"Wait and retry after Retry-After seconds."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/public/locale-content/city/{citySlug}/{pageSlug}":{"get":{"summary":"Published city landing page content.","description":"Published city landing page content.\n\n**Deprecated alias.** Prefer `/api/public/v1/locale-content/city/{citySlug}/{pageSlug}`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"getCityLocaleContent","tags":["locale"],"parameters":[{"name":"citySlug","in":"path","required":true,"schema":{"type":"string","example":"dubai"}},{"name":"pageSlug","in":"path","required":true,"schema":{"type":"string","example":"erp-software"}},{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"City page content.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocaleContentResponse"}}}},"404":{"description":"City page not found.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"429":{"description":"Rate limit exceeded.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}},"Retry-After":{"schema":{"type":"integer","example":60}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"},"example":{"error":{"code":"RATE_LIMITED","message":"Too many public API requests. Please wait before retrying.","resolution":"Wait and retry after Retry-After seconds."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/api/leads":{"post":{"summary":"Submit a contact, demo, or pricing enquiry. Rate limited per IP. Does not return stored lead records.","description":"Submit a contact, demo, or pricing enquiry. Rate limited per IP. Does not return stored lead records.\n\n**Deprecated alias.** Prefer `/api/public/v1/leads`. Sunset: Sat, 01 Jan 2028 00:00:00 GMT.","operationId":"submitLead","tags":["forms"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadRequest"}}}},"responses":{"201":{"description":"Lead accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadResponse"}}}},"400":{"description":"Validation failed (email, phone, or required demo fields).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"409":{"description":"Duplicate demo submission within cooldown window.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"429":{"description":"Too many submissions (12 per 10 minutes per IP).","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}},"Retry-After":{"schema":{"type":"integer","example":120}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"503":{"description":"Storage temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}},"deprecated":true}},"/sitemap.xml":{"get":{"summary":"XML sitemap of indexable public marketing URLs.","description":"XML sitemap of indexable public marketing URLs.","operationId":"getSitemapXml","tags":["seo"],"responses":{"200":{"description":"Sitemap XML","content":{"application/xml":{"schema":{"type":"string"}}}}}}},"/robots.txt":{"get":{"summary":"Robots directives; disallows /admin and /api/.","description":"Robots directives; disallows /admin and /api/.","operationId":"getRobotsTxt","tags":["seo"],"responses":{"200":{"description":"Robots file","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llms.txt":{"get":{"summary":"Agent instructions for safe public site usage.","description":"Agent instructions for safe public site usage.","operationId":"getLlmsTxt","tags":["seo"],"responses":{"200":{"description":"llms.txt","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llms-full.txt":{"get":{"summary":"Extended llms.txt with full module URL list.","description":"Extended llms.txt with full module URL list.","operationId":"getLlmsFullTxt","tags":["seo"],"responses":{"200":{"description":"llms-full.txt","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/openapi.json":{"get":{"summary":"This OpenAPI 3.1 specification.","description":"This OpenAPI 3.1 specification.","operationId":"getOpenApiSpec","tags":["seo"],"responses":{"200":{"description":"OpenAPI document.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenApiDocument"}}}}}}},"/api/public/v1/health":{"get":{"summary":"Returns API process health for uptime checks.","description":"Returns API process health for uptime checks.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getHealthV1","tags":["health"],"responses":{"200":{"description":"Service is running.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"503":{"description":"Storage or dependencies unavailable.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/site-settings":{"get":{"summary":"Published company/site settings: header, SEO defaults, footer, and contact details.","description":"Published company/site settings: header, SEO defaults, footer, and contact details.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getSiteSettingsV1","tags":["company"],"responses":{"200":{"description":"Site settings bundle.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteSettingsBundle"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"503":{"description":"Published content temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/countries":{"get":{"summary":"Published GCC country list for locale selectors.","description":"Published GCC country list for locale selectors.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"listCountriesV1","tags":["locale"],"parameters":[{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Enabled countries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountriesList"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/homepage":{"get":{"summary":"Alias of homepage bundle for UAE English legacy clients.","description":"Alias of homepage bundle for UAE English legacy clients.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getPublicHomepageV1","tags":["homepage"],"responses":{"200":{"description":"Homepage payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomepageBundle"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/site":{"get":{"summary":"Full published site bundle (same shape as homepage).","description":"Full published site bundle (same shape as homepage).\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getPublicSiteV1","tags":["homepage"],"responses":{"200":{"description":"Site bundle.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomepageBundle"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/navigation":{"get":{"summary":"Published header/footer navigation links.","description":"Published header/footer navigation links.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getNavigationV1","tags":["homepage"],"responses":{"200":{"description":"Navigation payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NavigationResponse"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/pages":{"get":{"summary":"List published CMS marketing pages (excludes admin routes).","description":"List published CMS marketing pages (excludes admin routes).\n\nStable **v1** route under `/api/public/v1/`.","operationId":"listPublicPagesV1","tags":["company"],"responses":{"200":{"description":"Published pages.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPagesList"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/pages/{slug}":{"get":{"summary":"Fetch one published CMS page by slug. Use for optional pricing or custom marketing pages when published.","description":"Fetch one published CMS page by slug. Use for optional pricing or custom marketing pages when published.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getPublicPageBySlugV1","tags":["company"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","example":"pricing"},"description":"Published CMS page slug."}],"responses":{"200":{"description":"Page payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPageDetail"}}}},"404":{"description":"Page slug not found or not published.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/locale-content/{slug}":{"get":{"summary":"Localized registry page content. Supported slugs include: erp, solutions, business-models, faqs, contact, industries.","description":"Localized registry page content. Supported slugs include: erp, solutions, business-models, faqs, contact, industries.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getLocaleContentBySlugV1","tags":["solutions"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","enum":["erp","solutions","business-models","faqs","contact","industries"],"example":"erp"}},{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Localized page view.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocaleContentResponse"}}}},"404":{"description":"Not published for locale or missing translation.","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},{"type":"object","properties":{"slug":{"type":"string"},"countryCode":{"type":"string","example":"QA"},"lang":{"type":"string","example":"en"},"meta":{"$ref":"#/components/schemas/LocaleMeta"},"fallback":{"type":"object","required":["countryCode","lang","href"],"properties":{"countryCode":{"type":"string"},"lang":{"type":"string","enum":["en","ar"]},"href":{"type":"string","format":"uri"}}}}}]}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/locale-content/software/{kind}/{slug}":{"get":{"summary":"Localized ERP module or industry software detail page.","description":"Localized ERP module or industry software detail page.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getLocaleSoftwareContentV1","tags":["solutions"],"parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","enum":["module","industry"],"example":"module"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","example":"inventory-management-software"}},{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Software detail page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocaleContentResponse"}}}},"400":{"description":"Invalid kind or slug.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"404":{"description":"Software page not published for locale.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/testimonials":{"get":{"summary":"Published testimonials section and items.","description":"Published testimonials section and items.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"listTestimonialsV1","tags":["testimonials"],"parameters":[{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Testimonials payload.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestimonialsResponse"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/blog/categories":{"get":{"summary":"Published blog categories.","description":"Published blog categories.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"listBlogCategoriesV1","tags":["blog"],"parameters":[{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Categories.","content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BlogCategory"}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/blog/posts":{"get":{"summary":"Paginated published blog posts with optional search and category filter.","description":"Paginated published blog posts with optional search and category filter.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"listBlogPostsV1","tags":["blog"],"parameters":[{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"},{"name":"category","in":"query","schema":{"type":"string"},"description":"Category slug or id."},{"name":"search","in":"query","schema":{"type":"string"},"description":"Case-insensitive title/excerpt search."},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","minimum":1,"maximum":24,"default":9}}],"responses":{"200":{"description":"Blog listing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostsList"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/blog/posts/{slug}":{"get":{"summary":"One published blog post with related posts.","description":"One published blog post with related posts.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getBlogPostBySlugV1","tags":["blog"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","example":"retail-pos-uae"}},{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"Blog post detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostDetail"}}}},"404":{"description":"Blog post not found.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/blog/homepage":{"get":{"summary":"Homepage blog preview (featured + items).","description":"Homepage blog preview (featured + items).\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getBlogHomepagePreviewV1","tags":["blog"],"parameters":[{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":6,"default":3}}],"responses":{"200":{"description":"Homepage blog section.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogHomepagePreview"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/locale-hint":{"get":{"summary":"Non-precise country hint from trusted proxy headers (never stores IP). Used for UX only.","description":"Non-precise country hint from trusted proxy headers (never stores IP). Used for UX only.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getLocaleHintV1","tags":["locale"],"responses":{"200":{"description":"Country hint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocaleHint"}}}}}}},"/api/public/v1/locale-routing":{"get":{"summary":"Public locale routing decision for `/` (same logic as geo redirect; informational).","description":"Public locale routing decision for `/` (same logic as geo redirect; informational).\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getLocaleRoutingV1","tags":["locale"],"responses":{"200":{"description":"Routing decision.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocaleRouting"}}}}}}},"/api/public/v1/seo-page":{"get":{"summary":"Resolve canonical, robots, hreflang, and title for a public path.","description":"Resolve canonical, robots, hreflang, and title for a public path.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getSeoPageV1","tags":["seo"],"parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","example":"/erp"},"description":"Public site path including locale prefix when applicable."}],"responses":{"200":{"description":"SEO metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeoPageResponse"}}}},"429":{"description":"Rate limit exceeded.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}},"Retry-After":{"schema":{"type":"integer","example":60}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"},"example":{"error":{"code":"RATE_LIMITED","message":"Too many public API requests. Please wait before retrying.","resolution":"Wait and retry after Retry-After seconds."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"503":{"description":"SEO resolver unavailable.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/cities":{"get":{"summary":"Published city registry for UAE and GCC locale pages.","description":"Published city registry for UAE and GCC locale pages.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"listCitiesV1","tags":["locale"],"parameters":[{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"City list.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CitiesList"}}}},"429":{"description":"Rate limit exceeded.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}},"Retry-After":{"schema":{"type":"integer","example":60}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"},"example":{"error":{"code":"RATE_LIMITED","message":"Too many public API requests. Please wait before retrying.","resolution":"Wait and retry after Retry-After seconds."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/locale-content/city/{citySlug}/{pageSlug}":{"get":{"summary":"Published city landing page content.","description":"Published city landing page content.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"getCityLocaleContentV1","tags":["locale"],"parameters":[{"name":"citySlug","in":"path","required":true,"schema":{"type":"string","example":"dubai"}},{"name":"pageSlug","in":"path","required":true,"schema":{"type":"string","example":"erp-software"}},{"name":"country","in":"query","description":"ISO GCC country code (AE, SA, QA, OM, KW, BH). Defaults to AE.","schema":{"type":"string","enum":["AE","SA","QA","OM","KW","BH"],"default":"AE"},"example":"AE"},{"name":"lang","in":"query","description":"Published language code.","schema":{"type":"string","enum":["en","ar"],"default":"en"},"example":"en"}],"responses":{"200":{"description":"City page content.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocaleContentResponse"}}}},"404":{"description":"City page not found.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"429":{"description":"Rate limit exceeded.","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}},"Retry-After":{"schema":{"type":"integer","example":60}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"},"example":{"error":{"code":"RATE_LIMITED","message":"Too many public API requests. Please wait before retrying.","resolution":"Wait and retry after Retry-After seconds."}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}},"/api/public/v1/leads":{"post":{"summary":"Submit a contact, demo, or pricing enquiry. Rate limited per IP. Does not return stored lead records.","description":"Submit a contact, demo, or pricing enquiry. Rate limited per IP. Does not return stored lead records.\n\nStable **v1** route under `/api/public/v1/`.","operationId":"submitLeadV1","tags":["forms"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadRequest"}}}},"responses":{"201":{"description":"Lead accepted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadResponse"}}}},"400":{"description":"Validation failed (email, phone, or required demo fields).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"409":{"description":"Duplicate demo submission within cooldown window.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"429":{"description":"Too many submissions (12 per 10 minutes per IP).","headers":{"RateLimit-Limit":{"schema":{"type":"integer","example":120}},"RateLimit-Remaining":{"schema":{"type":"integer","example":119}},"RateLimit-Reset":{"schema":{"type":"integer","example":1787983877}},"Retry-After":{"schema":{"type":"integer","example":120}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicApiError"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}},"503":{"description":"Storage temporarily unavailable.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string","enum":["RESOURCE_NOT_FOUND","VALIDATION_ERROR","RATE_LIMITED","CONFLICT","SERVICE_UNAVAILABLE","INTERNAL_ERROR"]},"message":{"type":"string"},"resolution":{"type":"string"}}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}},"example":{"error":{"code":"RESOURCE_NOT_FOUND","message":"The requested resource was not found.","resolution":"Check the request path or consult /developers and /openapi.json."}}}}}}}}}}