{"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://digitalmanager.ae/contact","email":"info@digitalmanager.ae"}},"servers":[{"url":"https://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","properties":{"ok":{"type":"boolean","example":true},"service":{"type":"string","example":"digitalmanager-cms-api"},"timestamp":{"type":"string","format":"date-time"}},"example":{"ok":true,"service":"digitalmanager-cms-api","timestamp":"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","properties":{"page":{"type":"object","additionalProperties":true},"meta":{"type":"object","additionalProperties":true}}},"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}},"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.","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.","content":{"application/json":{"schema":{"type":"object","properties":{"header":{"type":"object"},"seo":{"type":"object"},"footer":{"type":"object"},"siteSettings":{"type":"object","properties":{"primaryEmail":{"type":"string","example":"info@digitalmanager.ae"},"phoneDisplay":{"type":"string","example":"+971 4 123 4567"},"officeAddress":{"$ref":"#/components/schemas/BilingualString"}}}}}}}},"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":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object"}}}}}}},"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.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"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":{"type":"object","additionalProperties":true}}}},"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":{"type":"object","additionalProperties":true}}}},"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":{"type":"object","properties":{"headerLinks":{"type":"array","items":{"type":"object"}},"footerColumns":{"type":"object"},"pages":{"type":"array","items":{"type":"object"}}}}}}},"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":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object"}}}}}}},"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":{"type":"object","properties":{"page":{"type":"object","additionalProperties":true}}}}}},"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":{"type":"object","additionalProperties":true},"fallback":{"type":"object","properties":{"countryCode":{"type":"string"},"lang":{"type":"string"},"href":{"type":"string"}}}}}]}}}},"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":{"type":"object","additionalProperties":true}}}},"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.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"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","properties":{"items":{"type":"array","items":{"type":"object"}}}}}}},"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":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"section":{"type":"object"}}}}}},"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":{"type":"object","properties":{"post":{"type":"object"},"related":{"type":"array","items":{"type":"object"}},"prev":{"type":"object","nullable":true},"next":{"type":"object","nullable":true}}}}}},"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":{"type":"object","additionalProperties":true}}}},"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":{"type":"object","properties":{"countryCode":{"type":"string","example":"AE"},"source":{"type":"string","enum":["header","fallback"],"example":"header"}}}}}}},"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":{"type":"object","properties":{"redirect":{"type":"string","nullable":true,"example":"/qa/en"},"country":{"type":"string","example":"qa"},"lang":{"type":"string","example":"en"}}}}}}},"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":1787655416}},"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.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"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":1787655416}},"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":1787655416}},"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":1787655416}},"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":{"type":"object","additionalProperties":true}}}}}}},"/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.","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.","content":{"application/json":{"schema":{"type":"object","properties":{"header":{"type":"object"},"seo":{"type":"object"},"footer":{"type":"object"},"siteSettings":{"type":"object","properties":{"primaryEmail":{"type":"string","example":"info@digitalmanager.ae"},"phoneDisplay":{"type":"string","example":"+971 4 123 4567"},"officeAddress":{"$ref":"#/components/schemas/BilingualString"}}}}}}}},"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":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object"}}}}}}},"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":{"type":"object","additionalProperties":true}}}},"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":{"type":"object","additionalProperties":true}}}},"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":{"type":"object","properties":{"headerLinks":{"type":"array","items":{"type":"object"}},"footerColumns":{"type":"object"},"pages":{"type":"array","items":{"type":"object"}}}}}}},"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":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object"}}}}}}},"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":{"type":"object","properties":{"page":{"type":"object","additionalProperties":true}}}}}},"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":{"type":"object","additionalProperties":true},"fallback":{"type":"object","properties":{"countryCode":{"type":"string"},"lang":{"type":"string"},"href":{"type":"string"}}}}}]}}}},"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.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"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","properties":{"items":{"type":"array","items":{"type":"object"}}}}}}},"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":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"section":{"type":"object"}}}}}},"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":{"type":"object","properties":{"post":{"type":"object"},"related":{"type":"array","items":{"type":"object"}},"prev":{"type":"object","nullable":true},"next":{"type":"object","nullable":true}}}}}},"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":{"type":"object","additionalProperties":true}}}},"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":{"type":"object","properties":{"countryCode":{"type":"string","example":"AE"},"source":{"type":"string","enum":["header","fallback"],"example":"header"}}}}}}}}},"/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":{"type":"object","properties":{"redirect":{"type":"string","nullable":true,"example":"/qa/en"},"country":{"type":"string","example":"qa"},"lang":{"type":"string","example":"en"}}}}}}}}},"/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":1787655416}},"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.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"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":1787655416}},"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":1787655416}},"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":1787655416}},"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."}}}}}}}}}}