Legal

Compliance

Last updated: May 2025  ·  For licensing enquiries:

📜 Data Lineage Standard

Every record returned by the Borsat API — whether a price bar, corporate action, or announcement — carries a mandatory set of lineage fields. These fields allow your compliance and audit teams to trace any data point back to its original source, applicable license, and ingestion event.

Lineage fields on every API response

FieldTypeDescription
source_exchangestringISO short code of the originating exchange (e.g. QSE, TADAWUL)
micstringISO 10383 Market Identifier Code (e.g. XQAT)
license_idintegerInternal identifier of the exchange data license under which this record is distributed
ingested_atISO 8601 datetimeUTC timestamp when the record was received and validated by Borsat
dataset_versionsemver stringSchema and processing version of the dataset (e.g. 1.0.0)
vendor_idstringIdentifier of the upstream data vendor or direct exchange feed
adj_factorfloatCumulative adjustment factor applied for splits and dividends (EOD bars only). Raw price × adj_factor = adjusted price.

Bulk CSV exports include all lineage columns. Parquet files include full column-level metadata in the Parquet schema. These fields cannot be removed or omitted by API configuration.

🔒 Entitlement Model

Borsat enforces a default-deny access model. Every API key is associated with a client account. Each client account holds a set of entitlements that explicitly grant access to specific (MIC, dataset, access_right) tuples. Any request against a MIC or dataset not covered by an active entitlement is rejected with BORSAT_ACCESS_DENIED.

Access decision flow

API Request
Authenticate API key
Resolve client_id
Check entitlement
(MIC + dataset + right)
✓ ALLOW
✗ DENY 403

Entitlement dimensions

DimensionValuesNotes
MICXQAT, XSES, XDFM, XADS, XKUW, XMUS, XBAH, XCAI, XAMM, XCAS, XTUN, XPAL, XISXOne entitlement per exchange. GCC bundle available.
Dataseteod_bars, tick_data, corporate_actions, announcements, fundamentals, order_bookEntitlements are per dataset, not all-or-nothing per exchange.
Access Rightinternal_use, redistribution, derived_dataRedistribution requires explicit exchange approval.

🏛️ Exchange Licensing by MIC

Borsat sources data under data distribution agreements with each exchange or licensed vendor. The table below summarises the licensing status, attribution requirements, and redistribution rights for each covered exchange.

ExchangeMICCountryCurrencyEOD BarsCorp. ActionsAttribution Required
Qatar Stock ExchangeXQATQAQARLicensedLicensedYes — "Source: QSE"
Saudi Exchange (Tadawul)XSESSASARLicensedLicensedYes — "Source: Tadawul"
Dubai Financial MarketXDFMAEAEDLicensedLicensedYes — "Source: DFM"
Abu Dhabi Securities ExchangeXADSAEAEDLicensedLicensedYes — "Source: ADX"
Boursa KuwaitXKUWKWKWDLicensedIn ProgressYes — "Source: Boursa Kuwait"
Muscat Stock ExchangeXMUSOMOMRLicensedIn ProgressYes — "Source: MSM"
Bahrain BourseXBAHBHBHDLicensedIn ProgressYes — "Source: Bahrain Bourse"
Egyptian ExchangeXCAIEGEGPIn ProgressPendingYes — "Source: EGX"
Amman Stock ExchangeXAMMJOJODIn ProgressPendingYes — "Source: ASE"
Casablanca Stock ExchangeXCASMAMADIn ProgressPendingYes — "Source: CSE"
Bourse de TunisXTUNTNTNDPendingPendingYes — "Source: BVMT"
Palestine ExchangeXPALPSILSPendingPendingYes — "Source: PEX"
Iraq Stock ExchangeXISXIQIQDPendingPendingYes — "Source: ISX"

📊 Dataset Definitions

Dataset IDDescriptionUpdate FrequencyHistory Available
eod_barsEnd-of-day OHLCV prices with split/dividend adj_factorDaily (post-close)From exchange inception
tick_dataIndividual trade ticks and best bid/ask quotes, µs precisionReal-timeRolling 12 months
corporate_actionsDividends, splits, rights, mergers, delistingsWithin 1 hour of announcementFrom exchange inception
announcementsRegulatory filings, earnings, board resolutionsReal-time (exchange feed)5 years rolling
fundamentals50+ financial metrics from audited statementsPer reporting period10 years annual, 5 years quarterly
order_bookL2 order book snapshots (bid/ask depth)Real-timeRolling 30 days

📋 Permitted Use Policy

Internal Use — All subscription tiers include rights to use data for internal portfolio management, risk analysis, research, and investment decision-making within the subscribing legal entity.

Derived Data — Clients may create derived works (indices, analytics, models) from licensed data provided the underlying data is not directly reconstructible from the output. Derived data rights are included in the Professional and Enterprise tiers.

Redistribution — Direct redistribution of raw exchange data to third parties requires explicit redistribution rights, which must be negotiated separately with Borsat and the originating exchange. Redistribution without a license is a material breach of the agreement.

AI and Machine Learning — Using licensed data to train, fine-tune, or evaluate machine learning models constitutes internal use provided the model is used solely for the subscribing entity's own investment activities. Training models for resale or external distribution requires an enterprise license.

🧾 Audit Trail Architecture

All API calls are logged in a tamper-evident access log with the following fields. Enterprise clients can request a raw export of their access log for up to 24 months, suitable for regulatory reporting and internal compliance audits.

FieldDescription
timestampUTC request timestamp (millisecond precision)
client_idSubscribing entity identifier
api_key_idHashed identifier of the API key used (key value never stored)
endpointAPI endpoint path and HTTP method
micExchange MIC accessed
datasetDataset type accessed
records_returnedCount of records in the response
response_msServer-side response latency
ip_addressClient IP (hashed for GDPR compliance)

⚠️ Compliance Error Codes

All access denials return HTTP 403 with a structured JSON body. The error field is machine-readable and stable across API versions.

BORSAT_ACCESS_DENIED

Returned when the authenticated client does not hold a valid entitlement for the requested MIC + dataset combination.

{
  "status": 403,
  "error": "BORSAT_ACCESS_DENIED",
  "message": "No active entitlement for MIC=XQAT, dataset=tick_data",
  "details": {
    "mic": "XQAT",
    "dataset": "tick_data",
    "access_right": "internal_use",
    "contact": "support@borsat.ai for licensing"
  },
  "request_id": "3f8a1c2d-...",
  "timestamp": "2025-05-01T09:14:32.001Z"
}

BORSAT_LICENSE_EXPIRED

The client's license for this exchange has lapsed. Data access is suspended until renewal.

BORSAT_REDISTRIBUTION_REQUIRED

The requested operation (e.g. bulk export for third-party delivery) requires a redistribution license.

📬 Licensing & Compliance Contact

For data licensing enquiries, redistribution rights, compliance documentation requests, or audit log exports, contact:

Data Licensing Team
data@borsat.ai

Compliance & Legal
legal@borsat.ai

Enterprise Sales
Contact form →