SLA & Health
Real-time platform health, active incidents, scheduled maintenance, and your partner SLA tier via GET /sla. Drive in-app status banners and alert users when market data or order execution is degraded. Incident severity P0–P3 explained.
Real-time platform health status, active incidents, scheduled maintenance windows, and your partner SLA tier. Use it to drive status banners in your app or alert users when market data or order execution is degraded.
Service health
Returns overall platform health, any active incidents with severity and affected services, upcoming
maintenance windows, and your SLA tier entitlements. Incidents are also broadcast via the
incident.declared and incident.resolved webhooks.
Public status-page consumers can call GET /api/v1/status without partner credentials. It returns
service health, active incidents, recent resolved incidents, and maintenance windows with public cache
headers, while authenticated partners continue to receive incident webhooks and SSE events.
/sla
SLA status
Full endpoint documentationlistSlaReturns real-time service health, active incidents, upcoming maintenance windows, and your SLA tier commitments. | Tier | Uptime SLO | Rate Limit | |------|-----------|------------| | Standard (starter) | 99.5% | 100 req/min | | Professional (growth) | 99.9% | 500 req/min | | Enterprise | 99.95% | 2,000 req/min |
Parameters
This endpoint has no path or query parameters.
Headers
AuthorizationstringRequiredBearer sk_sandbox_<your_key> for sandbox requests.
Response fields
overallStatusoperational | partial_outage | major_outagePlatform-wide health summary.
checkedAtstringservicesobject[]Per-service health breakdown.
services[].idstringExample: "trading-api"
services[].namestringExample: "Trading API"
services[].descriptionstringservices[].statusoperational | degraded | outageservices[].uptime30dnumber | nullservices[].uptime90dnumber | nullservices[].currentMonthUptimenumber | nullactiveIncidentsobject[]activeIncidents[].idstringactiveIncidents[].titlestringactiveIncidents[].severityP0 | P1 | P2 | P3activeIncidents[].statusstringactiveIncidents[].affectedServicesstring[]activeIncidents[].startedAtstring | nullactiveIncidents[].resolvedAtstring | nullpastIncidentsobject[]Incidents resolved in the last 30 days.
maintenanceobject[]Upcoming scheduled maintenance windows.
maintenance[].idstringmaintenance[].titlestringmaintenance[].scheduledStartstring | nullmaintenance[].scheduledEndstring | nullmaintenance[].statusstringpartnerobjectYour SLA tier and committed SLO targets.
partner.slaTierstringExample: "Standard"
partner.sloobjectpartner.executionSloobjectResponse codes
200Service health, incidents, and partner SLA commitments.Published service objectives
SLOs are measured per calendar month from MyStocks server-side request and service-health telemetry. A successful API request is one that reaches the service and returns a non-5xx response; partner authentication, validation, rate-limit, market-closed, and insufficient-funds responses are not service failures.
| Tier | Monthly availability | 30-day error budget | P0 acknowledgement |
|---|---|---|---|
| Standard | 99.5% | 216 minutes | 30 minutes |
| Professional | 99.9% | 43.2 minutes | 15 minutes |
| Enterprise | 99.95% | 21.6 minutes | 5 minutes |
For GA certification, authenticated non-streaming API traffic must sustain p95 response latency of at most 1 second and an error rate of at most 0.1% under the approved load profile. Regional failover recovery must complete within 60 seconds. Live market-order execution has a separate five-minute operational target while the relevant exchange is open; it is not an HTTP latency metric.
Planned maintenance announced at least 72 hours in advance, partner-side failures, exchange closures, and force-majeure upstream outages are reported separately. They are excluded from service-credit calculations only where the signed partner SLA explicitly permits it. Error-budget exhaustion freezes non-essential releases until reliability has recovered or an authorized exception is documented.
Order operations and execution expectations
An API acknowledgement is not an execution confirmation. A successfully accepted
order enters PENDING and may remain there while the dealing team validates market
status, buying power, restrictions, and the available execution venue. Build partner
interfaces around the webhook-driven lifecycle rather than assuming an immediate fill.
| Event | Published objective | Source of truth |
|---|---|---|
| API acknowledgement | Within the API latency objective above | HTTP response and request ID |
| Order review during an open supported session | Five-minute operational target | Order status and execution webhooks |
| Market closed or outside the supported dealing window | Held, rejected, or expired under the documented order policy | GET /market/status and order lifecycle |
| Material service degradation | Incident acknowledgement by contracted tier | Public status and incident webhooks |
| Reconciliation exception | Investigated before the next controlled-production trading window | Reconciliation report and support case |
Exchange sessions, holidays, early closes, and settlement dates vary by market.
Use GET /market/status, GET /market/holidays, and GET /market/settlement
instead of hard-coding local hours. A signed enterprise SLA can add named dealing
coverage and escalation contacts; it does not turn a pending acknowledgement into
a guaranteed fill.
For an order that exceeds the published objective, open a support case with the
order ID and X-Request-ID. Do not submit a duplicate order. The support severity
depends on customer impact and whether the relevant exchange is open.
/market/status
Market status (NSE, NGX, JSE, GSE, etc.)
Full endpoint documentationgetMarketStatusReturns the real-time open/closed status for each supported African stock exchange (NSE, NGX, JSE, GSE, BRVM, ZSE, BSE, LUSE, EGX, DSE, USE, MSE, CSE, SEM), next session boundaries, server time, and local trading hours. Pass ?exchange=NSE to get status for a single exchange. Without the filter the response includes all exchanges plus an anyOpen boolean.
Parameters
exchangestringqueryFilter to a single exchange code (NSE, NGX, JSE, GSE, BRVM, ZSE, BSE, LUSE, EGX, DSE, USE, MSE, CSE, SEM).
Example: NSE
Headers
AuthorizationstringRequiredBearer sk_sandbox_<your_key> for sandbox requests.
Response fields
anyOpenbooleanTrue if at least one exchange is currently open.
checkedAtstringserverTimestringexchangesobjectKeyed by exchange code (e.g. "NSE", "NGX"). Each value is an exchange status object.
Response codes
200Exchange status map.404Unknown exchange code./market/holidays
Market holiday calendar
Full endpoint documentationgetMarketHolidaysReturns exchange closure dates for a given date range. Use this to: - Show users when a specific exchange is closed before they try to trade. - Build "next trading day" schedulers (skip weekends and holidays). - Display an in-app holiday calendar alongside market status. Defaults: from = today, to = 12 months from today. Maximum range is 2 years. All African exchanges (UTC+0 to UTC+3) use ISO 8601 dates in UTC.
Parameters
exchangestringqueryFilter to a single exchange. One of: NSE, NGX, JSE, GSE, BRVM, ZSE, BSE, LUSE, EGX, DSE, USE, MSE, CSE, SEM. Omit to return holidays for all exchanges.
Example: NSE
fromstringqueryStart date (inclusive), YYYY-MM-DD. Defaults to today.
Example: 2026-06-06
tostringqueryEnd date (inclusive), YYYY-MM-DD. Defaults to 12 months from from. Maximum 2 years from from.
Example: 2026-12-31
Headers
AuthorizationstringRequiredBearer sk_sandbox_<your_key> for sandbox requests.
Response fields
dataobject[]data[].exchangestringRequiredExchange code.
Example: "NSE"
data[].datestringRequiredClosure date in YYYY-MM-DD format.
Example: "2026-12-25"
data[].reasonstringRequiredHuman-readable reason for the closure.
Example: "Christmas Day"
countintegerExample: 8
fromstringExample: "2026-06-06"
tostringExample: "2026-12-31"
metaobjectStandard response metadata included on every market-data envelope.
meta.request_idstringUnique identifier for this request. Include in support tickets for tracing.
Example: "4f6e1a2b-3c4d-5e6f-7a8b-9c0d1e2f3a4b"
meta.timestampstringISO 8601 UTC timestamp of when the response was generated.
Example: "2026-06-04T10:23:45.123Z"
meta.exchangestring | nullExchange code the request was scoped to, when applicable.
Example: "NSE"
meta.symbolstring | nullTicker symbol the request was scoped to, when applicable.
Example: "SCOM.KE"
Response codes
200Holiday calendar entries for the requested range.400Invalid exchange code or date format.401Unauthorized./market/settlement
Settlement cycles and live fill target
Full endpoint documentationgetMarketSettlementReturns the official T+N settlement cycle for each supported exchange (i.e. when title and beneficial ownership transfer after trade execution), plus the MyStocks live fill SLA for market orders submitted during exchange hours. Important distinction - MyStocks live fill SLA — the time before a PENDING live order moves to COMPLETED or REJECTED. Execution window: 1 to 5 minutes during market hours. - Exchange settlement cycle — the standard T+N cycle mandated by the exchange and its CSD. This governs when the underlying shares clear through the depository (T+2 for EGX, T+3 for all other supported exchanges). Use ?exchange=NSE to filter to a single exchange.
Parameters
exchangestringqueryFilter to a single exchange code (NSE, NGX, JSE, GSE, BRVM, ZSE, BSE, LUSE, EGX, DSE, USE, MSE, CSE, SEM).
Example: NSE
Headers
AuthorizationstringRequiredBearer sk_sandbox_<your_key> for sandbox requests.
Response fields
processingWindowobjectprocessingWindow.targetTurnaroundHoursnumberLegacy hour equivalent of the live 5-minute fill target.
Example: 0.083
processingWindow.minTurnaroundMinutesintegerEarliest expected live execution window, in minutes.
Example: 1
processingWindow.maxTurnaroundMinutesintegerMaximum live execution window, in minutes.
Example: 5
processingWindow.targetTurnaroundMinutesintegerMonitoring deadline between live market order submission and fill/rejection during market hours.
Example: 5
processingWindow.descriptionstringprocessingWindow.outsideHoursNotestringprocessingWindow.processingDaysstringExample: "Monday – Friday (excluding public holidays)"
processingWindow.webhookNotestringprocessingWindow.pollEndpointstringExample: "GET /api/v1/partner/orders/{orderId}"
exchangesobjectResponse codes
200Settlement cycles and live fill target.401Unauthorized.404Unknown exchange code.Incident severity levels
| Level | Name | Impact |
|---|---|---|
P0 | Critical | Full platform outage — all trading and market data unavailable. |
P1 | Major | Core service degraded — order execution or market data impaired. |
P2 | Minor | Partial degradation — some exchanges or endpoints affected. |
P3 | Informational | Maintenance or cosmetic issue with no user impact. |
Was this page useful?
Your signal helps us tighten partner onboarding docs.
Last updated on