Перейти к основному содержимому

Shared Open API application & rate limits

По умолчанию каждый пользователь регистрирует свой собственный cTrader Open API application под Settings → Open API. White-label оператор (typically cTrader broker или reseller) может instead ship один shared Open API application для всех пользователей — никто не регистрирует свой; все authorizуют свои счета через единый app оператора.

Два способа предоставить shared application​

Shared application провизионируется либо из deployment config либо из owner settings UI (owner-set value wins). Provide it once и shared-mode включается для всех.

1. Deployment config (seeded on startup)​

"App": {
"OpenApi": {
"PublicBaseUrl": "https://cmind.yourbroker.com", // canonical public URL of THIS deployment
"SharedApp": {
"Enabled": true,
"Name": "YourBroker Open API",
"ClientId": "1234_abcd...",
"ClientSecret": "…" // encrypted at rest; never logged
}
}
}

При старте приложение seed'ит один shared application owned by owner account (idempotent — never overwrites owner-edited runtime value, и re-seeding это no-op).

2. Owner settings (runtime, no redeploy)​

Settings → Open API (owner only) показывает два варианта: секция Your Open API application — владелец регистрирует, редактирует и авторизирует своё собственное per-user приложение точно так же, как любой пользователь (доступно пока не настроено shared app) — и Deployment shared application card для добавления / редактирования / удаления shared app, с отображённым redirect URL для copy-paste. Изменения применяются для новых authorizations немедленно. Как только настроено shared app, оно заменяет собственное приложение владельца, и секция Your Open API application переключается на уведомление о том, что счета теперь авторизуются через shared app.

Redirect URL (зарегистрируйте это в cTrader)​

Каждое cTrader Open API application регистрирует один redirect URL — тот же самое значение для shared app и для любого per-user app:

{your deployment URL}/openapi/callback

например https://cmind.yourbroker.com/openapi/callback.

  • Приложение отображает точное значение на Open API settings page (с кнопкой копирования) — paste it into the cTrader partner portal при создании Open API application.
  • Он составляется из App:OpenApi:PublicBaseUrl поэтому остаётся стабильным behind reverse proxy / CDN; когда unset, fallback'ит к inbound request host.
  • Invite vs normal-user experience различается только где пользователь lands after callback (their accounts list vs "accounts added" confirmation) — зарегистрированный redirect URL unchanged.

Что пользователи видят в shared mode​

Когда shared application существует:

  • Пользователи не имеют опции регистрировать свой собственный Open API application — settings page показывает "Open API is managed by your provider" и кнопку Authorize accounts, использующую shared app.
  • Любые pre-existing personal applications удаляются; их authorized accounts re-pointed к shared app и должны быть re-authorized (their old tokens were issued under different client id). Attempting to create a personal app returns "managed by your provider" error.

Client rate limits (per message type)​

Клиент ограничивает outbound cTrader Open API messages so a burst никогда не trips server-side rate-limit block. Лимиты per message type, matching cTrader Open API docs:

CategoryЧто покрываетDefault
Generaltrading + read messages (orders, symbols, account queries)45 msg/s
HistoricalDatatrendbar / tick-data requests (throttled harder by cTrader)5 msg/s

A historical-data request counts against both its own bucket и the general bucket. Heartbeat и authentication messages never paced. Messages queue и drain at available rate — nothing dropped и order preserved.

Tune их если ваш broker negotiated higher cTrader limits, или установите category в 0 to disable pacing entirely (unlimited):

  • Config: App:OpenApi:RateLimits:General / App:OpenApi:RateLimits:HistoricalData (msgs/sec).
  • Owner settings: Client rate limits card on Settings → Open API (owner override wins, applies to new connections / on reconnect).